Merge pull request #1295 from rouault/fix_1293
[openjpeg.git] / src / lib / openjp3d / pi.h
index 1edcc5fce5c7c1f7dbab76756a61044bbfbb9fb8..6e6118dded85f99261231fa008205f115f2b8f14 100644 (file)
-/*\r
- * Copyright (c) 2001-2003, David Janssens\r
- * Copyright (c) 2002-2003, Yannick Verschueren\r
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe\r
- * Copyright (c) 2005, Herve Drolon, FreeImage Team\r
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium\r
- * Copyright (c) 2006, M�nica D�ez Garc�a, Image Processing Laboratory, University of Valladolid, Spain\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
-#ifndef __PI_H\r
-#define __PI_H\r
-/**\r
-@file pi.h\r
-@brief Implementation of a packet iterator (PI)\r
-\r
-The functions in PI.C have for goal to realize a packet iterator that permits to get the next\r
-packet following the progression order and change of it. The functions in PI.C are used\r
-by some function in T2.C.\r
-*/\r
-\r
-/** @defgroup PI PI - Implementation of a packet iterator */\r
-/*@{*/\r
-\r
-/**\r
-Packet iterator : resolution level information \r
-*/\r
-typedef struct opj_pi_resolution {\r
-/** Size of precints in horizontal axis */\r
-       int pdx;\r
-/** Size of precints in vertical axis */\r
-       int pdy;\r
-/** Size of precints in axial axis */\r
-       int pdz;\r
-/** Number of precints in each axis */\r
-       int prctno[3];                          \r
-} opj_pi_resolution_t;\r
-\r
-/**\r
-Packet iterator : component information \r
-*/\r
-typedef struct opj_pi_comp {\r
-/** Size in horizontal axis */\r
-       int dx;\r
-/** Size in vertical axis */\r
-       int dy;\r
-/** Size in axial axis */\r
-       int dz;\r
-/** Number of resolution levels */\r
-       int numresolution[3];                   \r
-/** Packet iterator : resolution level information */\r
-       opj_pi_resolution_t *resolutions;\r
-} opj_pi_comp_t;\r
-\r
-/** \r
-Packet iterator \r
-*/\r
-typedef struct opj_pi_iterator {\r
-/** precise if the packet has been already used (usefull for progression order change) */\r
-       short int *include;             \r
-/** layer step used to localize the packet in the include vector */\r
-       int step_l;             \r
-/** resolution step used to localize the packet in the include vector */\r
-       int step_r;     \r
-/** component step used to localize the packet in the include vector */\r
-       int step_c;                             \r
-/** precinct step used to localize the packet in the include vector */\r
-       int step_p;                             \r
-/** component that identify the packet */\r
-       int compno;                             \r
-/** resolution that identify the packet */\r
-       int resno;                              \r
-/** precinct that identify the packet */\r
-       int precno;                             \r
-/** layer that identify the packet */\r
-       int layno;                              \r
-/** 0 if the first packet */\r
-       int first;                              \r
-/** progression order change information */\r
-       opj_poc_t poc;                  \r
-/**    Packet iterator : component information */\r
-opj_pi_comp_t *comps;\r
-       \r
-       int numcomps;\r
-       int tx0, ty0, tz0;\r
-       int tx1, ty1, tz1;\r
-       int x, y, z;\r
-       int dx, dy, dz;\r
-} opj_pi_iterator_t;\r
-\r
-/** @name Funciones generales */\r
-/*@{*/\r
-/* ----------------------------------------------------------------------- */\r
-/**\r
-Create a packet iterator\r
-@param volume Raw volume for which the packets will be listed\r
-@param cp Coding parameters\r
-@param tileno Number that identifies the tile for which to list the packets\r
-@return Returns a packet iterator that points to the first packet of the tile\r
-@see pi_destroy\r
-*/\r
-opj_pi_iterator_t *pi_create(opj_volume_t * volume, opj_cp_t * cp, int tileno);\r
-\r
-/**\r
-Destroy a packet iterator\r
-@param pi Previously created packet iterator\r
-@param cp Coding parameters\r
-@param tileno Number that identifies the tile for which the packets were listed\r
-@see pi_create\r
-*/\r
-void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno);\r
-\r
-/**\r
-Modify the packet iterator to point to the next packet\r
-@param pi Packet iterator to modify\r
-@return Returns false if pi pointed to the last packet or else returns true \r
-*/\r
-bool pi_next(opj_pi_iterator_t * pi);\r
-/* ----------------------------------------------------------------------- */\r
-/*@}*/\r
-\r
-/*@}*/\r
-\r
-#endif /* __PI_H */\r
+/*
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
+ * party and contributor rights, including patent rights, and no such rights
+ * are granted under this license.
+ *
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * Copyright (c) 2006, Mónica Díez García, Image Processing Laboratory, University of Valladolid, Spain
+ * 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.
+ */
+
+#ifndef __PI_H
+#define __PI_H
+/**
+@file pi.h
+@brief Implementation of a packet iterator (PI)
+
+The functions in PI.C have for goal to realize a packet iterator that permits to get the next
+packet following the progression order and change of it. The functions in PI.C are used
+by some function in T2.C.
+*/
+
+/** @defgroup PI PI - Implementation of a packet iterator */
+/*@{*/
+
+/**
+Packet iterator : resolution level information
+*/
+typedef struct opj_pi_resolution {
+    /** Size of precints in horizontal axis */
+    int pdx;
+    /** Size of precints in vertical axis */
+    int pdy;
+    /** Size of precints in axial axis */
+    int pdz;
+    /** Number of precints in each axis */
+    int prctno[3];
+} opj_pi_resolution_t;
+
+/**
+Packet iterator : component information
+*/
+typedef struct opj_pi_comp {
+    /** Size in horizontal axis */
+    int dx;
+    /** Size in vertical axis */
+    int dy;
+    /** Size in axial axis */
+    int dz;
+    /** Number of resolution levels */
+    int numresolution[3];
+    /** Packet iterator : resolution level information */
+    opj_pi_resolution_t *resolutions;
+} opj_pi_comp_t;
+
+/**
+Packet iterator
+*/
+typedef struct opj_pi_iterator {
+    /** precise if the packet has been already used (useful for progression order change) */
+    short int *include;
+    /** layer step used to localize the packet in the include vector */
+    int step_l;
+    /** resolution step used to localize the packet in the include vector */
+    int step_r;
+    /** component step used to localize the packet in the include vector */
+    int step_c;
+    /** precinct step used to localize the packet in the include vector */
+    int step_p;
+    /** component that identify the packet */
+    int compno;
+    /** resolution that identify the packet */
+    int resno;
+    /** precinct that identify the packet */
+    int precno;
+    /** layer that identify the packet */
+    int layno;
+    /** 0 if the first packet */
+    int first;
+    /** progression order change information */
+    opj_poc_t poc;
+    /** Packet iterator : component information */
+    opj_pi_comp_t *comps;
+
+    int numcomps;
+    int tx0, ty0, tz0;
+    int tx1, ty1, tz1;
+    int x, y, z;
+    int dx, dy, dz;
+} opj_pi_iterator_t;
+
+/** @name Funciones generales */
+/*@{*/
+/* ----------------------------------------------------------------------- */
+/**
+Create a packet iterator
+@param volume Raw volume for which the packets will be listed
+@param cp Coding parameters
+@param tileno Number that identifies the tile for which to list the packets
+@return Returns a packet iterator that points to the first packet of the tile
+@see pi_destroy
+*/
+opj_pi_iterator_t *pi_create(opj_volume_t * volume, opj_cp_t * cp, int tileno);
+
+/**
+Destroy a packet iterator
+@param pi Previously created packet iterator
+@param cp Coding parameters
+@param tileno Number that identifies the tile for which the packets were listed
+@see pi_create
+*/
+void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno);
+
+/**
+Modify the packet iterator to point to the next packet
+@param pi Packet iterator to modify
+@return Returns false if pi pointed to the last packet or else returns true
+*/
+bool pi_next(opj_pi_iterator_t * pi);
+/* ----------------------------------------------------------------------- */
+/*@}*/
+
+/*@}*/
+
+#endif /* __PI_H */