]> Creatis software - gdcm.git/blobdiff - src/gdcmopenjpeg/libopenjpeg/jpt.c
Forgot to update this one
[gdcm.git] / src / gdcmopenjpeg / libopenjpeg / jpt.c
index 032d3bcf2d8a8c0aa26778476a4a9670b8f16d03..9b75994b069e0c0b23e633b0611281e132314c16 100644 (file)
-/*\r
- * Copyright (c) 2004, Yannick Verschueren\r
- * Copyright (c) 2005, HervĂ© Drolon, FreeImage Team\r
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium\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
-\r
-#include "opj_includes.h"\r
-\r
-/*\r
- * Read the information contains in VBAS [JPP/JPT stream message header]\r
- * Store information (7 bits) in value\r
- *\r
- */\r
-unsigned int jpt_read_VBAS_info(opj_cio_t *cio, unsigned int value) {\r
-  unsigned char elmt;\r
-\r
-  elmt = cio_read(cio, 1);\r
-  while ((elmt >> 7) == 1) {\r
-    value = (value << 7);\r
-    value |= (elmt & 0x7f);\r
-    elmt = cio_read(cio, 1);\r
-  }\r
-  value = (value << 7);\r
-  value |= (elmt & 0x7f);\r
-\r
-  return value;\r
-}\r
-\r
-/*\r
- * Initialize the value of the message header structure \r
- *\r
- */\r
-void jpt_init_msg_header(opj_jpt_msg_header_t * header) {\r
-  header->Id = 0;    /* In-class Identifier    */\r
-  header->last_byte = 0;  /* Last byte information  */\r
-  header->Class_Id = 0;    /* Class Identifier       */\r
-  header->CSn_Id = 0;    /* CSn : index identifier */\r
-  header->Msg_offset = 0;  /* Message offset         */\r
-  header->Msg_length = 0;  /* Message length         */\r
-  header->Layer_nb = 0;    /* Auxiliary for JPP case */\r
-}\r
-\r
-/*\r
- * Re-initialize the value of the message header structure\r
- *\r
- * Only parameters always present in message header\r
- *\r
- */\r
-void jpt_reinit_msg_header(opj_jpt_msg_header_t * header) {\r
-  header->Id = 0;    /* In-class Identifier    */\r
-  header->last_byte = 0;  /* Last byte information  */\r
-  header->Msg_offset = 0;  /* Message offset         */\r
-  header->Msg_length = 0;  /* Message length         */\r
-}\r
-\r
-/*\r
- * Read the message header for a JPP/JPT - stream\r
- *\r
- */\r
-void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio, opj_jpt_msg_header_t *header) {\r
-  unsigned char elmt, Class = 0, CSn = 0;\r
-  jpt_reinit_msg_header(header);\r
-\r
-  /* ------------- */\r
-  /* VBAS : Bin-ID */\r
-  /* ------------- */\r
-  elmt = cio_read(cio, 1);\r
-\r
-  /* See for Class and CSn */\r
-  switch ((elmt >> 5) & 0x03) {\r
-    case 0:\r
-      opj_event_msg(cinfo, EVT_ERROR, "Forbidden value encounter in message header !!\n");\r
-      break;\r
-    case 1:\r
-      Class = 0;\r
-      CSn = 0;\r
-      break;\r
-    case 2:\r
-      Class = 1;\r
-      CSn = 0;\r
-      break;\r
-    case 3:\r
-      Class = 1;\r
-      CSn = 1;\r
-      break;\r
-    default:\r
-      break;\r
-  }\r
-\r
-  /* see information on bits 'c' [p 10 : A.2.1 general, ISO/IEC FCD 15444-9] */\r
-  if (((elmt >> 4) & 0x01) == 1)\r
-    header->last_byte = 1;\r
-\r
-  /* In-class identifier */\r
-  header->Id |= (elmt & 0x0f);\r
-  if ((elmt >> 7) == 1)\r
-    header->Id = jpt_read_VBAS_info(cio, header->Id);\r
-\r
-  /* ------------ */\r
-  /* VBAS : Class */\r
-  /* ------------ */\r
-  if (Class == 1) {\r
-    header->Class_Id = 0;\r
-    header->Class_Id = jpt_read_VBAS_info(cio, header->Class_Id);\r
-  }\r
-\r
-  /* ---------- */\r
-  /* VBAS : CSn */\r
-  /* ---------- */\r
-  if (CSn == 1) {\r
-    header->CSn_Id = 0;\r
-    header->CSn_Id = jpt_read_VBAS_info(cio, header->CSn_Id);\r
-  }\r
-\r
-  /* ----------------- */\r
-  /* VBAS : Msg_offset */\r
-  /* ----------------- */\r
-  header->Msg_offset = jpt_read_VBAS_info(cio, header->Msg_offset);\r
-\r
-  /* ----------------- */\r
-  /* VBAS : Msg_length */\r
-  /* ----------------- */\r
-  header->Msg_length = jpt_read_VBAS_info(cio, header->Msg_length);\r
-\r
-  /* ---------- */\r
-  /* VBAS : Aux */\r
-  /* ---------- */\r
-  if ((header->Class_Id & 0x01) == 1) {\r
-    header->Layer_nb = 0;\r
-    header->Layer_nb = jpt_read_VBAS_info(cio, header->Layer_nb);\r
-  }\r
-}\r
+/*
+ * Copyright (c) 2004, Yannick Verschueren
+ * Copyright (c) 2005, HervĂ© Drolon, FreeImage Team
+ * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "opj_includes.h"
+
+/*
+ * Read the information contains in VBAS [JPP/JPT stream message header]
+ * Store information (7 bits) in value
+ *
+ */
+unsigned int jpt_read_VBAS_info(opj_cio_t *cio, unsigned int value) {
+  unsigned char elmt;
+
+  elmt = cio_read(cio, 1);
+  while ((elmt >> 7) == 1) {
+    value = (value << 7);
+    value |= (elmt & 0x7f);
+    elmt = cio_read(cio, 1);
+  }
+  value = (value << 7);
+  value |= (elmt & 0x7f);
+
+  return value;
+}
+
+/*
+ * Initialize the value of the message header structure 
+ *
+ */
+void jpt_init_msg_header(opj_jpt_msg_header_t * header) {
+  header->Id = 0;    /* In-class Identifier    */
+  header->last_byte = 0;  /* Last byte information  */
+  header->Class_Id = 0;    /* Class Identifier       */
+  header->CSn_Id = 0;    /* CSn : index identifier */
+  header->Msg_offset = 0;  /* Message offset         */
+  header->Msg_length = 0;  /* Message length         */
+  header->Layer_nb = 0;    /* Auxiliary for JPP case */
+}
+
+/*
+ * Re-initialize the value of the message header structure
+ *
+ * Only parameters always present in message header
+ *
+ */
+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);
+  }
+}