1/* 2 * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium 3 * Copyright (c) 2002-2007, Professor Benoit Macq 4 * Copyright (c) 2001-2003, David Janssens 5 * Copyright (c) 2002-2003, Yannick Verschueren 6 * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe 7 * Copyright (c) 2005, Herve Drolon, FreeImage Team 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32#ifndef __PI_H 33#define __PI_H 34/** 35@file pi.h 36@brief Implementation of a packet iterator (PI) 37 38The functions in PI.C have for goal to realize a packet iterator that permits to get the next 39packet following the progression order and change of it. The functions in PI.C are used 40by some function in T2.C. 41*/ 42 43/** @defgroup PI PI - Implementation of a packet iterator */ 44/*@{*/ 45 46/** 47FIXME: documentation 48*/ 49typedef struct opj_pi_resolution { 50 int pdx, pdy; 51 int pw, ph; 52} opj_pi_resolution_t; 53 54/** 55FIXME: documentation 56*/ 57typedef struct opj_pi_comp { 58 int dx, dy; 59 /** number of resolution levels */ 60 int numresolutions; 61 opj_pi_resolution_t *resolutions; 62} opj_pi_comp_t; 63 64/** 65Packet iterator 66*/ 67typedef struct opj_pi_iterator { 68 /** Enabling Tile part generation*/ 69 char tp_on; 70 /** precise if the packet has been already used (usefull for progression order change) */ 71 short int *include; 72 /** layer step used to localize the packet in the include vector */ 73 int step_l; 74 /** resolution step used to localize the packet in the include vector */ 75 int step_r; 76 /** component step used to localize the packet in the include vector */ 77 int step_c; 78 /** precinct step used to localize the packet in the include vector */ 79 int step_p; 80 /** component that identify the packet */ 81 int compno; 82 /** resolution that identify the packet */ 83 int resno; 84 /** precinct that identify the packet */ 85 int precno; 86 /** layer that identify the packet */ 87 int layno; 88 /** 0 if the first packet */ 89 int first; 90 /** progression order change information */ 91 opj_poc_t poc; 92 /** number of components in the image */ 93 int numcomps; 94 /** Components*/ 95 opj_pi_comp_t *comps; 96 int tx0, ty0, tx1, ty1; 97 int x, y, dx, dy; 98} opj_pi_iterator_t; 99 100/** @name Exported functions */ 101/*@{*/ 102/* ----------------------------------------------------------------------- */ 103/** 104Create a packet iterator for Encoder 105@param image Raw image for which the packets will be listed 106@param cp Coding parameters 107@param tileno Number that identifies the tile for which to list the packets 108@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass 109@return Returns a packet iterator that points to the first packet of the tile 110@see pi_destroy 111*/ 112opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp, int tileno,J2K_T2_MODE t2_mode); 113/** 114Modify the packet iterator for enabling tile part generation 115@param pi Handle to the packet iterator generated in pi_initialise_encode 116@param cp Coding parameters 117@param tileno Number that identifies the tile for which to list the packets 118@param pino Iterator index for pi 119@param tpnum Tile part number of the current tile 120@param tppos The position of the tile part flag in the progression order 121@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass 122@param cur_totnum_tp The total number of tile parts in the current tile 123@return Returns true if an error is detected 124*/ 125opj_bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp); 126/** 127Create a packet iterator for Decoder 128@param image Raw image for which the packets will be listed 129@param cp Coding parameters 130@param tileno Number that identifies the tile for which to list the packets 131@return Returns a packet iterator that points to the first packet of the tile 132@see pi_destroy 133*/ 134opj_pi_iterator_t *pi_create_decode(opj_image_t * image, opj_cp_t * cp, int tileno); 135 136/** 137Destroy a packet iterator 138@param pi Previously created packet iterator 139@param cp Coding parameters 140@param tileno Number that identifies the tile for which the packets were listed 141@see pi_create 142*/ 143void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno); 144 145/** 146Modify the packet iterator to point to the next packet 147@param pi Packet iterator to modify 148@return Returns false if pi pointed to the last packet or else returns true 149*/ 150opj_bool pi_next(opj_pi_iterator_t * pi); 151/* ----------------------------------------------------------------------- */ 152/*@}*/ 153 154/*@}*/ 155 156#endif /* __PI_H */ 157