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