xref: /aosp_15_r20/external/pdfium/third_party/libopenjpeg/pi.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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