1*3ac0a46fSAndroid Build Coastguard Worker /* 2*3ac0a46fSAndroid Build Coastguard Worker * The copyright in this software is being made available under the 2-clauses 3*3ac0a46fSAndroid Build Coastguard Worker * BSD License, included below. This software may be subject to other third 4*3ac0a46fSAndroid Build Coastguard Worker * party and contributor rights, including patent rights, and no such rights 5*3ac0a46fSAndroid Build Coastguard Worker * are granted under this license. 6*3ac0a46fSAndroid Build Coastguard Worker * 7*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium 8*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2002-2014, Professor Benoit Macq 9*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2001-2003, David Janssens 10*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2002-2003, Yannick Verschueren 11*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2003-2007, Francois-Olivier Devaux 12*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2003-2014, Antonin Descampe 13*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2005, Herve Drolon, FreeImage Team 14*3ac0a46fSAndroid Build Coastguard Worker * All rights reserved. 15*3ac0a46fSAndroid Build Coastguard Worker * 16*3ac0a46fSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 17*3ac0a46fSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 18*3ac0a46fSAndroid Build Coastguard Worker * are met: 19*3ac0a46fSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 20*3ac0a46fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 21*3ac0a46fSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 22*3ac0a46fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 23*3ac0a46fSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 24*3ac0a46fSAndroid Build Coastguard Worker * 25*3ac0a46fSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 26*3ac0a46fSAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27*3ac0a46fSAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28*3ac0a46fSAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 29*3ac0a46fSAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30*3ac0a46fSAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31*3ac0a46fSAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32*3ac0a46fSAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33*3ac0a46fSAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34*3ac0a46fSAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35*3ac0a46fSAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE. 36*3ac0a46fSAndroid Build Coastguard Worker */ 37*3ac0a46fSAndroid Build Coastguard Worker 38*3ac0a46fSAndroid Build Coastguard Worker #ifndef OPJ_PI_H 39*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_PI_H 40*3ac0a46fSAndroid Build Coastguard Worker /** 41*3ac0a46fSAndroid Build Coastguard Worker @file pi.h 42*3ac0a46fSAndroid Build Coastguard Worker @brief Implementation of a packet iterator (PI) 43*3ac0a46fSAndroid Build Coastguard Worker 44*3ac0a46fSAndroid Build Coastguard Worker The functions in PI.C have for goal to realize a packet iterator that permits to get the next 45*3ac0a46fSAndroid Build Coastguard Worker packet following the progression order and change of it. The functions in PI.C are used 46*3ac0a46fSAndroid Build Coastguard Worker by some function in T2.C. 47*3ac0a46fSAndroid Build Coastguard Worker */ 48*3ac0a46fSAndroid Build Coastguard Worker 49*3ac0a46fSAndroid Build Coastguard Worker /** @defgroup PI PI - Implementation of a packet iterator */ 50*3ac0a46fSAndroid Build Coastguard Worker /*@{*/ 51*3ac0a46fSAndroid Build Coastguard Worker 52*3ac0a46fSAndroid Build Coastguard Worker /** 53*3ac0a46fSAndroid Build Coastguard Worker FIXME DOC 54*3ac0a46fSAndroid Build Coastguard Worker */ 55*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_pi_resolution { 56*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 pdx, pdy; 57*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 pw, ph; 58*3ac0a46fSAndroid Build Coastguard Worker } opj_pi_resolution_t; 59*3ac0a46fSAndroid Build Coastguard Worker 60*3ac0a46fSAndroid Build Coastguard Worker /** 61*3ac0a46fSAndroid Build Coastguard Worker FIXME DOC 62*3ac0a46fSAndroid Build Coastguard Worker */ 63*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_pi_comp { 64*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 dx, dy; 65*3ac0a46fSAndroid Build Coastguard Worker /** number of resolution levels */ 66*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numresolutions; 67*3ac0a46fSAndroid Build Coastguard Worker opj_pi_resolution_t *resolutions; 68*3ac0a46fSAndroid Build Coastguard Worker } opj_pi_comp_t; 69*3ac0a46fSAndroid Build Coastguard Worker 70*3ac0a46fSAndroid Build Coastguard Worker /** 71*3ac0a46fSAndroid Build Coastguard Worker Packet iterator 72*3ac0a46fSAndroid Build Coastguard Worker */ 73*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_pi_iterator { 74*3ac0a46fSAndroid Build Coastguard Worker /** Enabling Tile part generation*/ 75*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE tp_on; 76*3ac0a46fSAndroid Build Coastguard Worker /** precise if the packet has been already used (useful for progression order change) */ 77*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT16 *include; 78*3ac0a46fSAndroid Build Coastguard Worker /** Number of elements in include array */ 79*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 include_size; 80*3ac0a46fSAndroid Build Coastguard Worker /** layer step used to localize the packet in the include vector */ 81*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 step_l; 82*3ac0a46fSAndroid Build Coastguard Worker /** resolution step used to localize the packet in the include vector */ 83*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 step_r; 84*3ac0a46fSAndroid Build Coastguard Worker /** component step used to localize the packet in the include vector */ 85*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 step_c; 86*3ac0a46fSAndroid Build Coastguard Worker /** precinct step used to localize the packet in the include vector */ 87*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 step_p; 88*3ac0a46fSAndroid Build Coastguard Worker /** component that identify the packet */ 89*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 compno; 90*3ac0a46fSAndroid Build Coastguard Worker /** resolution that identify the packet */ 91*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 resno; 92*3ac0a46fSAndroid Build Coastguard Worker /** precinct that identify the packet */ 93*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 precno; 94*3ac0a46fSAndroid Build Coastguard Worker /** layer that identify the packet */ 95*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 layno; 96*3ac0a46fSAndroid Build Coastguard Worker /** 0 if the first packet */ 97*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL first; 98*3ac0a46fSAndroid Build Coastguard Worker /** progression order change information */ 99*3ac0a46fSAndroid Build Coastguard Worker opj_poc_t poc; 100*3ac0a46fSAndroid Build Coastguard Worker /** number of components in the image */ 101*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numcomps; 102*3ac0a46fSAndroid Build Coastguard Worker /** Components*/ 103*3ac0a46fSAndroid Build Coastguard Worker opj_pi_comp_t *comps; 104*3ac0a46fSAndroid Build Coastguard Worker /** FIXME DOC*/ 105*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tx0, ty0, tx1, ty1; 106*3ac0a46fSAndroid Build Coastguard Worker /** FIXME DOC*/ 107*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 x, y; 108*3ac0a46fSAndroid Build Coastguard Worker /** FIXME DOC*/ 109*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 dx, dy; 110*3ac0a46fSAndroid Build Coastguard Worker /** event manager */ 111*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t* manager; 112*3ac0a46fSAndroid Build Coastguard Worker } opj_pi_iterator_t; 113*3ac0a46fSAndroid Build Coastguard Worker 114*3ac0a46fSAndroid Build Coastguard Worker /** @name Exported functions */ 115*3ac0a46fSAndroid Build Coastguard Worker /*@{*/ 116*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 117*3ac0a46fSAndroid Build Coastguard Worker /** 118*3ac0a46fSAndroid Build Coastguard Worker * Creates a packet iterator for encoding. 119*3ac0a46fSAndroid Build Coastguard Worker * 120*3ac0a46fSAndroid Build Coastguard Worker * @param image the image being encoded. 121*3ac0a46fSAndroid Build Coastguard Worker * @param cp the coding parameters. 122*3ac0a46fSAndroid Build Coastguard Worker * @param tileno index of the tile being encoded. 123*3ac0a46fSAndroid Build Coastguard Worker * @param t2_mode the type of pass for generating the packet iterator 124*3ac0a46fSAndroid Build Coastguard Worker * @param manager Event manager 125*3ac0a46fSAndroid Build Coastguard Worker * 126*3ac0a46fSAndroid Build Coastguard Worker * @return a list of packet iterator that points to the first packet of the tile (not true). 127*3ac0a46fSAndroid Build Coastguard Worker */ 128*3ac0a46fSAndroid Build Coastguard Worker opj_pi_iterator_t *opj_pi_initialise_encode(const opj_image_t *image, 129*3ac0a46fSAndroid Build Coastguard Worker opj_cp_t *cp, 130*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tileno, 131*3ac0a46fSAndroid Build Coastguard Worker J2K_T2_MODE t2_mode, 132*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t* manager); 133*3ac0a46fSAndroid Build Coastguard Worker 134*3ac0a46fSAndroid Build Coastguard Worker /** 135*3ac0a46fSAndroid Build Coastguard Worker * Updates the encoding parameters of the codec. 136*3ac0a46fSAndroid Build Coastguard Worker * 137*3ac0a46fSAndroid Build Coastguard Worker * @param p_image the image being encoded. 138*3ac0a46fSAndroid Build Coastguard Worker * @param p_cp the coding parameters. 139*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_no index of the tile being encoded. 140*3ac0a46fSAndroid Build Coastguard Worker */ 141*3ac0a46fSAndroid Build Coastguard Worker void opj_pi_update_encoding_parameters(const opj_image_t *p_image, 142*3ac0a46fSAndroid Build Coastguard Worker opj_cp_t *p_cp, 143*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_tile_no); 144*3ac0a46fSAndroid Build Coastguard Worker 145*3ac0a46fSAndroid Build Coastguard Worker /** 146*3ac0a46fSAndroid Build Coastguard Worker Modify the packet iterator for enabling tile part generation 147*3ac0a46fSAndroid Build Coastguard Worker @param pi Handle to the packet iterator generated in pi_initialise_encode 148*3ac0a46fSAndroid Build Coastguard Worker @param cp Coding parameters 149*3ac0a46fSAndroid Build Coastguard Worker @param tileno Number that identifies the tile for which to list the packets 150*3ac0a46fSAndroid Build Coastguard Worker @param pino FIXME DOC 151*3ac0a46fSAndroid Build Coastguard Worker @param tpnum Tile part number of the current tile 152*3ac0a46fSAndroid Build Coastguard Worker @param tppos The position of the tile part flag in the progression order 153*3ac0a46fSAndroid Build Coastguard Worker @param t2_mode FIXME DOC 154*3ac0a46fSAndroid Build Coastguard Worker */ 155*3ac0a46fSAndroid Build Coastguard Worker void opj_pi_create_encode(opj_pi_iterator_t *pi, 156*3ac0a46fSAndroid Build Coastguard Worker opj_cp_t *cp, 157*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tileno, 158*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 pino, 159*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tpnum, 160*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 tppos, 161*3ac0a46fSAndroid Build Coastguard Worker J2K_T2_MODE t2_mode); 162*3ac0a46fSAndroid Build Coastguard Worker 163*3ac0a46fSAndroid Build Coastguard Worker /** 164*3ac0a46fSAndroid Build Coastguard Worker Create a packet iterator for Decoder 165*3ac0a46fSAndroid Build Coastguard Worker @param image Raw image for which the packets will be listed 166*3ac0a46fSAndroid Build Coastguard Worker @param cp Coding parameters 167*3ac0a46fSAndroid Build Coastguard Worker @param tileno Number that identifies the tile for which to list the packets 168*3ac0a46fSAndroid Build Coastguard Worker @param manager Event manager 169*3ac0a46fSAndroid Build Coastguard Worker @return Returns a packet iterator that points to the first packet of the tile 170*3ac0a46fSAndroid Build Coastguard Worker @see opj_pi_destroy 171*3ac0a46fSAndroid Build Coastguard Worker */ 172*3ac0a46fSAndroid Build Coastguard Worker opj_pi_iterator_t *opj_pi_create_decode(opj_image_t * image, 173*3ac0a46fSAndroid Build Coastguard Worker opj_cp_t * cp, 174*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tileno, 175*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t* manager); 176*3ac0a46fSAndroid Build Coastguard Worker /** 177*3ac0a46fSAndroid Build Coastguard Worker * Destroys a packet iterator array. 178*3ac0a46fSAndroid Build Coastguard Worker * 179*3ac0a46fSAndroid Build Coastguard Worker * @param p_pi the packet iterator array to destroy. 180*3ac0a46fSAndroid Build Coastguard Worker * @param p_nb_elements the number of elements in the array. 181*3ac0a46fSAndroid Build Coastguard Worker */ 182*3ac0a46fSAndroid Build Coastguard Worker void opj_pi_destroy(opj_pi_iterator_t *p_pi, 183*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_nb_elements); 184*3ac0a46fSAndroid Build Coastguard Worker 185*3ac0a46fSAndroid Build Coastguard Worker /** 186*3ac0a46fSAndroid Build Coastguard Worker Modify the packet iterator to point to the next packet 187*3ac0a46fSAndroid Build Coastguard Worker @param pi Packet iterator to modify 188*3ac0a46fSAndroid Build Coastguard Worker @return Returns false if pi pointed to the last packet or else returns true 189*3ac0a46fSAndroid Build Coastguard Worker */ 190*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_pi_next(opj_pi_iterator_t * pi); 191*3ac0a46fSAndroid Build Coastguard Worker 192*3ac0a46fSAndroid Build Coastguard Worker /** 193*3ac0a46fSAndroid Build Coastguard Worker * Return the number of packets in the tile. 194*3ac0a46fSAndroid Build Coastguard Worker * @param image the image being encoded. 195*3ac0a46fSAndroid Build Coastguard Worker * @param cp Coding parameters 196*3ac0a46fSAndroid Build Coastguard Worker * @param tileno Number that identifies the tile. 197*3ac0a46fSAndroid Build Coastguard Worker */ 198*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 opj_get_encoding_packet_count(const opj_image_t *p_image, 199*3ac0a46fSAndroid Build Coastguard Worker const opj_cp_t *p_cp, 200*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_tile_no); 201*3ac0a46fSAndroid Build Coastguard Worker 202*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 203*3ac0a46fSAndroid Build Coastguard Worker /*@}*/ 204*3ac0a46fSAndroid Build Coastguard Worker 205*3ac0a46fSAndroid Build Coastguard Worker /*@}*/ 206*3ac0a46fSAndroid Build Coastguard Worker 207*3ac0a46fSAndroid Build Coastguard Worker #endif /* OPJ_PI_H */ 208