]> granicus.if.org Git - openjpeg/commitdiff
[trunk] Fix issue with ITU-T T.809 (05/2011)
authorMathieu Malaterre <mathieu.malaterre@gmail.com>
Wed, 28 Nov 2012 11:46:16 +0000 (11:46 +0000)
committerMathieu Malaterre <mathieu.malaterre@gmail.com>
Wed, 28 Nov 2012 11:46:16 +0000 (11:46 +0000)
- ZSI is now known as NSI (FF54)
- NSI now stores Ndim (=3)
- CAP extended marker was not set properly

src/bin/jp3d/opj_jp3d_decompress.c
src/lib/openjp3d/jp3d.c
src/lib/openjp3d/jp3d.h

index 0a58b678cb5a59dd8c92f35d5da6150507955f8a..c2cdb321792e5e81622aa6b986b0d10a022c06ec 100755 (executable)
@@ -518,7 +518,8 @@ int main(int argc, char **argv) {
        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]),volume->comps[0].prec);\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
index 593cda825ca8f77ee2a677606f4dde93c8dc381f..95e6ff3b18b98330412e834a8c9e5ed0a11a2e10 100755 (executable)
@@ -58,15 +58,15 @@ Read the SIZ marker (2D volume and tile size)
 */\r
 static void j3d_read_siz(opj_j3d_t *j3d);\r
 /**\r
-Write the ZSI marker (3rd volume and tile size)\r
+Write the NSI marker (3rd volume and tile size)\r
 @param j3d J3D handle\r
 */\r
-static void j3d_write_zsi(opj_j3d_t *j3d);\r
+static void j3d_write_nsi(opj_j3d_t *j3d);\r
 /**\r
-Read the ZSI marker (3rd volume and tile size)\r
+Read the NSI marker (3rd volume and tile size)\r
 @param j3d J3D handle\r
 */\r
-static void j3d_read_zsi(opj_j3d_t *j3d);\r
+static void j3d_read_nsi(opj_j3d_t *j3d);\r
 /**\r
 Write the COM marker (comment)\r
 @param j3d J3D handle\r
@@ -418,6 +418,10 @@ static void j3d_write_cap(opj_j3d_t *j3d){
        lenp = cio_tell(cio);\r
        cio_skip(cio, 2);\r
        cio_write(cio,J3D_CAP_10, 4); \r
+  if( J3D_CAP_10 )\r
+    {\r
+    cio_write(cio, 0x0, 2); \r
+    }\r
        len = cio_tell(cio) - lenp;\r
        cio_seek(cio, lenp);\r
        cio_write(cio, len, 2);         /* Lsiz */\r
@@ -430,18 +434,24 @@ static void j3d_read_cap(opj_j3d_t *j3d){
        /*cio_read(cio, 2);      CAP */\r
        len = cio_read(cio, 2);\r
        Cap = cio_read(cio, 4);\r
+  if(Cap) {\r
+    cio_read(cio, 2);\r
+  }\r
+  assert( len == 2 + 4 + 2 );\r
 }\r
-static void j3d_write_zsi(opj_j3d_t *j3d) {\r
+static void j3d_write_nsi(opj_j3d_t *j3d) {\r
        int i;\r
        int lenp, len;\r
+  int ndim = 3;\r
 \r
        opj_cio_t *cio = j3d->cio;\r
        opj_volume_t *volume = j3d->volume;\r
        opj_cp_t *cp = j3d->cp;\r
        \r
-       cio_write(cio, J3D_MS_ZSI, 2);  /* ZSI */\r
+       cio_write(cio, J3D_MS_NSI, 2);  /* NSI */\r
        lenp = cio_tell(cio);\r
        cio_skip(cio, 2);\r
+       cio_write(cio, ndim, 1);        /* Ndim */\r
        cio_write(cio, volume->z1, 4);  /* Zsiz */\r
        cio_write(cio, volume->z0, 4);  /* Z0siz */\r
        cio_write(cio, cp->tdz, 4);             /* ZTsiz */\r
@@ -455,14 +465,17 @@ static void j3d_write_zsi(opj_j3d_t *j3d) {
        cio_seek(cio, lenp + len);\r
 }\r
 \r
-static void j3d_read_zsi(opj_j3d_t *j3d) {\r
+static void j3d_read_nsi(opj_j3d_t *j3d) {\r
+  int ndim;\r
        int len, i;\r
        \r
        opj_cio_t *cio = j3d->cio;\r
        opj_volume_t *volume = j3d->volume;\r
        opj_cp_t *cp = j3d->cp;\r
        \r
-       len = cio_read(cio, 2);                 /* Lsiz */\r
+       len = cio_read(cio, 2);                 /* Lnsi */\r
+       ndim = cio_read(cio, 1);                        /* Ndim */\r
+  assert( ndim == 3 );\r
        volume->z1 = cio_read(cio, 4);  /* Zsiz */\r
        volume->z0 = cio_read(cio, 4);  /* Z0siz */\r
        cp->tdz = cio_read(cio, 4);             /* ZTsiz */\r
@@ -1545,7 +1558,7 @@ opj_dec_mstabent_t j3d_dec_mstab[] = {
   {J3D_MS_EOC, J3D_STATE_TPHSOT, j3d_read_eoc},\r
   {J3D_MS_CAP, J3D_STATE_MHSIZ, j3d_read_cap},\r
   {J3D_MS_SIZ, J3D_STATE_MHSIZ, j3d_read_siz},\r
-  {J3D_MS_ZSI, J3D_STATE_MHSIZ, j3d_read_zsi},\r
+  {J3D_MS_NSI, J3D_STATE_MHSIZ, j3d_read_nsi},\r
   {J3D_MS_COD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_cod},\r
   {J3D_MS_COC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_coc},\r
   {J3D_MS_RGN, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_rgn},\r
@@ -2243,7 +2256,7 @@ bool j3d_encode(opj_j3d_t *j3d, opj_cio_t *cio, opj_volume_t *volume, char *inde
        j3d_write_siz(j3d);\r
        if (j3d->cinfo->codec_format == CODEC_J3D) {\r
                j3d_write_cap(j3d);\r
-               j3d_write_zsi(j3d);\r
+               j3d_write_nsi(j3d);\r
        }\r
        j3d_write_cod(j3d);\r
        j3d_write_qcd(j3d);\r
index e9ecf131df3a721aacfc2c86f5ce2a352cc463c3..edd27a1a57ca9f76fbb4fbd885006a7232f43cdf 100755 (executable)
@@ -65,7 +65,7 @@ The functions in J3D.C have for goal to read/write the several parts of the code
 #define J3D_MS_EOC 0xffd9      /**< EOC marker value */\r
 #define J3D_MS_CAP 0xff50      /**< CAP marker value */\r
 #define J3D_MS_SIZ 0xff51      /**< SIZ marker value */\r
-#define J3D_MS_ZSI 0xff54      /**< ZSI marker value */\r
+#define J3D_MS_NSI 0xff54      /**< NSI marker value */\r
 #define J3D_MS_COD 0xff52      /**< COD marker value */\r
 #define J3D_MS_COC 0xff53      /**< COC marker value */\r
 #define J3D_MS_RGN 0xff5e      /**< RGN marker value */\r