-/*
- * Copyright (c) 2004, Yannick Verschueren
- * Copyright (c) 2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "jpt.h"
-#include "j2k.h"
-#include "cio.h"
-
-
-/*
- * Read the information contains in VBAS [JPP/JPT stream message header]
- * Store information (7 bits) in value
- *
- */
-unsigned int jpt_read_VBAS_info(unsigned int value)
-{
- unsigned char elmt;
-
- elmt = cio_read(1);
- while ((elmt >> 7) == 1) {
- value = (value << 7);
- value |= (elmt & 0x7f);
- elmt = cio_read(1);
- }
- value = (value << 7);
- value |= (elmt & 0x7f);
-
- return value;
-}
-
-/*
- * Initialize the value of the message header structure
- *
- */
-void jpt_init_Msg_Header(jpt_msg_header_struct_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(jpt_msg_header_struct_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(jpt_msg_header_struct_t * header)
-{
- unsigned char elmt, Class = 0, CSn = 0;
- jpt_reinit_Msg_Header(header);
-
- /* ------------- */
- /* VBAS : Bin-ID */
- /* ------------- */
- elmt = cio_read(1);
-
- /* See for Class and CSn */
- switch ((elmt >> 5) & 0x03) {
- case 0:
- fprintf(stderr, "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(header->Id);
-
- /* ------------ */
- /* VBAS : Class */
- /* ------------ */
- if (Class == 1) {
- header->Class_Id = 0;
- header->Class_Id = jpt_read_VBAS_info(header->Class_Id);
- }
-
- /* ---------- */
- /* VBAS : CSn */
- /* ---------- */
- if (CSn == 1) {
- header->CSn_Id = 0;
- header->CSn_Id = jpt_read_VBAS_info(header->CSn_Id);
- }
-
- /* ----------------- */
- /* VBAS : Msg_offset */
- /* ----------------- */
- header->Msg_offset = jpt_read_VBAS_info(header->Msg_offset);
-
- /* ----------------- */
- /* VBAS : Msg_length */
- /* ----------------- */
- header->Msg_length = jpt_read_VBAS_info(header->Msg_length);
-
- /* ---------- */
- /* VBAS : Aux */
- /* ---------- */
- if ((header->Class_Id & 0x01) == 1) {
- header->Layer_nb = 0;
- header->Layer_nb = jpt_read_VBAS_info(header->Layer_nb);
- }
-}
+/*\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