[trunk] backout wrong changeset 1091 - see issue 123
[openjpeg.git] / libopenjpeg / jpt.c
index 04cc8264323202a591f07cddcac2ea0d79dc4d59..a2566ea887252c6f707a3a854ab122168eee85e2 100644 (file)
@@ -1,6 +1,8 @@
 /*
- * Copyright (c) 2004, Yannick Verschueren
- * Copyright (c) 2004, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "jpt.h"
-#include "j2k.h"
-#include "cio.h"
-
+#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(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;
+ */
+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(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 */
+ */
+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 */
 }
 
 /*
@@ -76,93 +69,87 @@ void jpt_init_Msg_Header(jpt_msg_header_struct_t *header)
  * 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         */
+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(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>>3) & 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->CSn_Id == 1)
-    {
-      header->Layer_nb = 0;
-      header->Layer_nb = jpt_read_VBAS_info(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);
+       }
 }