]> granicus.if.org Git - openjpeg/commitdiff
[trunk] Fix openmj2 compilation in static mode.
authorMathieu Malaterre <mathieu.malaterre@gmail.com>
Mon, 15 Oct 2012 08:09:31 +0000 (08:09 +0000)
committerMathieu Malaterre <mathieu.malaterre@gmail.com>
Mon, 15 Oct 2012 08:09:31 +0000 (08:09 +0000)
src/bin/mj2/CMakeLists.txt
src/lib/openmj2/CMakeLists.txt
src/lib/openmj2/cio.c [new file with mode: 0644]
src/lib/openmj2/image.c [new file with mode: 0644]
src/lib/openmj2/j2k_lib.c [new file with mode: 0644]
src/lib/openmj2/jpt.c [new file with mode: 0644]
src/lib/openmj2/raw.c [new file with mode: 0644]

index 8279fb8443d495501797b1c5d99e853420e8b856..a8f5ca9f7459f082ab8f375fbdb3ad0519c8314c 100644 (file)
@@ -2,31 +2,6 @@
 
 set(common_SRCS ${OPENJPEG_SOURCE_DIR}/src/bin/common/opj_getopt.c)
 
-# While mj2 executables do not use the API correctly, we do not link with the library but rather compile the sources files.
-set(OPJ_SRCS
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/bio.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/cio.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/dwt.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/event.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/image.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/j2k.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/j2k_lib.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/jp2.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/jpt.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/mct.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/mqc.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/openjpeg.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/pi.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/raw.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/t1.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/t2.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/tcd.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/tgt.c
-${OPENJPEG_SOURCE_DIR}/src/lib/openjp2/function_list.c
-)
-
-#set(MJ2_SRCS mj2.c mj2_convert.c)
-
 if(WIN32)
   add_definitions(-DOPJ_STATIC)
 endif()
@@ -34,7 +9,6 @@ endif()
 # Headers file are located here:
 include_directories(
   ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 # opj_config.h
-  #${OPENJPEG_SOURCE_DIR}/src/lib/openjp2
   ${OPENJPEG_SOURCE_DIR}/src/lib/openmj2
   ${OPENJPEG_SOURCE_DIR}/src/bin/common
   ${LCMS_INCLUDE_DIRNAME}
@@ -49,7 +23,6 @@ foreach(exe
   add_executable(${exe}
     ${exe}.c
     ${common_SRCS}
-    ${OPJ_SRCS}
     ${MJ2_SRCS}
     ${OPENJPEG_SOURCE_DIR}/src/bin/common/color.c
     )
index 3b6e3fc4ee0681d801fda71cc2e5cd2b8ed99f34..c2efe7e4bb75ec257dc9afca16d0bb501e17a7d2 100644 (file)
@@ -3,6 +3,8 @@ set(OPENMJ2_SRCS
   mj2.c
   mj2_convert.c
 # FIXME: legacy
+  j2k_lib.c
+  cio.c
   jp2.c
   j2k.c
   tcd.c
@@ -15,6 +17,9 @@ set(OPENMJ2_SRCS
   tgt.c
   dwt.c
   event.c
+  image.c
+  jpt.c
+  raw.c
   openjpeg.c
 )
 
diff --git a/src/lib/openmj2/cio.c b/src/lib/openmj2/cio.c
new file mode 100644 (file)
index 0000000..c0cb028
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * 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"
+
+/* ----------------------------------------------------------------------- */
+
+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);
+       }
+}
+
+
+/* ----------------------------------------------------------------------- */
+
+/*
+ * Get position in byte stream.
+ */
+int OPJ_CALLCONV cio_tell(opj_cio_t *cio) {
+       return cio->bp - cio->start;
+}
+
+/*
+ * Set position in byte stream.
+ *
+ * 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;
+}
+
+/*
+ * Number of bytes left before the end of the stream.
+ */
+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;
+}
+
+/*
+ * 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;
+}
+
+/*
+ * 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++;
+}
+
+/*
+ * Write some bytes.
+ *
+ * v : value to write
+ * n : number of bytes to write
+ */
+unsigned int 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;
+}
+
+/*
+ * Read some bytes.
+ *
+ * n : number of bytes to read
+ *
+ * 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;
+}
+
+/* 
+ * Skip some bytes.
+ *
+ * n : number of bytes to skip
+ */
+void cio_skip(opj_cio_t *cio, int n) {
+       cio->bp += n;
+}
+
+
+
diff --git a/src/lib/openmj2/image.c b/src/lib/openmj2/image.c
new file mode 100644 (file)
index 0000000..a4d2c01
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * 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"
+
+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;
+
+       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;
+}
+
+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);
+       }
+}
+
diff --git a/src/lib/openmj2/j2k_lib.c b/src/lib/openmj2/j2k_lib.c
new file mode 100644 (file)
index 0000000..a66e31e
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * 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 _WIN32
+#include <windows.h>
+#else
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/times.h>
+#endif /* _WIN32 */
+#include "opj_includes.h"
+
+double opj_clock(void) {
+#ifdef _WIN32
+       /* _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; */
+    /* t is the high resolution performance counter (see MSDN) */
+    QueryPerformanceCounter ( & t ) ;
+    return ( t.QuadPart /(double) freq.QuadPart ) ;
+#else
+       /* 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);
+    /* (2) What is the elapsed time ? - CPU time = User time + System time */
+       /* (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 ) ;
+#endif
+}
+
diff --git a/src/lib/openmj2/jpt.c b/src/lib/openmj2/jpt.c
new file mode 100644 (file)
index 0000000..a2566ea
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * 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
+ * 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);
+       }
+}
diff --git a/src/lib/openmj2/raw.c b/src/lib/openmj2/raw.c
new file mode 100644 (file)
index 0000000..3d231bf
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * 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"
+
+/* 
+==========================================================
+   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;
+}
+
+void raw_destroy(opj_raw_t *raw) {
+       if(raw) {
+               opj_free(raw);
+       }
+}
+
+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;
+}
+
+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;
+}
+