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