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 * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2012, CS Systemes d'Information, France
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * All rights reserved.
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Redistribution and use in source and binary forms, with or without
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * modification, are permitted provided that the following conditions
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are met:
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 1. Redistributions of source code must retain the above copyright
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *    notice, this list of conditions and the following disclaimer.
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 2. Redistributions in binary form must reproduce the above copyright
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *    notice, this list of conditions and the following disclaimer in the
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *    documentation and/or other materials provided with the distribution.
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * POSSIBILITY OF SUCH DAMAGE.
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef __TCD_H
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define __TCD_H
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@file tcd.h
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@brief Implementation of a tile coder/decoder (TCD)
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovThe functions in TCD.C encode or decode each tile independently from
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganoveach other. The functions in TCD.C are used by other functions in J2K.C.
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** @defgroup TCD TCD - Implementation of a tile coder/decoder */
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@{*/
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_seg {
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BYTE ** data;
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 dataindex;
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numpasses;
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 real_num_passes;
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 len;
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 maxpasses;
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numnewpasses;
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 newlen;
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_seg_t;
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_pass {
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 rate;
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_FLOAT64 distortiondec;
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 len;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 term : 1;
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_pass_t;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_layer {
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numpasses;		/* Number of passes in the layer */
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 len;				/* len of information */
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_FLOAT64 disto;			/* add for index (Cfr. Marcela) */
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BYTE *data;				/* data */
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_layer_t;
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_cblk_enc {
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BYTE* data;					/* Data */
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_layer_t* layers;		/* layer information */
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_pass_t* passes;		/* information about the passes */
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* dimension of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numbps;
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numlenbits;
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numpasses;			/* number of pass already done for the code-blocks */
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numpassesinlayers;	/* number of passes in the layer */
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 totalpasses;			/* total number of passes */
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_cblk_enc_t;
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_cblk_dec {
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BYTE * data;				/* Data */
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_seg_t* segs;			/* segments information */
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* position of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numbps;
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numlenbits;
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    OPJ_UINT32 data_max_size;		/* Size of allocated data buffer */
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 data_current_size;	/* Size of used data buffer */
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numnewpasses;		/* number of pass added to the code-blocks */
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numsegs;				/* number of segments */
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 real_num_segs;
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 m_current_max_segs;
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_cblk_dec_t;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_precinct {
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cw, ch;				/* number of precinct in width and height */
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	union{							/* code-blocks information */
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		opj_tcd_cblk_enc_t* enc;
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		opj_tcd_cblk_dec_t* dec;
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	} cblks;
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 block_size;			/* size taken by cblks (in bytes) */
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tgt_tree_t *incltree;	    /* inclusion tree */
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tgt_tree_t *imsbtree;	    /* IMSB tree */
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_precinct_t;
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_band {
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 bandno;
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_precinct_t *precincts;	/* precinct information */
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 precincts_data_size;	/* size of data taken by precincts */
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 numbps;
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_FLOAT32 stepsize;
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_band_t;
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_resolution {
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 pw, ph;
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numbands;			/* number sub-band for the resolution level */
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_band_t bands[3];		/* subband information */
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_resolution_t;
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_tilecomp
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;				/* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numresolutions;				/* number of resolutions level */
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 minimum_num_resolutions;		/* number of resolutions level to decode (at max)*/
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_resolution_t *resolutions;	/* resolutions information */
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 resolutions_size;			/* size of data for resolutions (in bytes) */
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 *data;						/* data of the component */
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 data_size;					/* size of the data of the component */
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 numpix;						/* add fixed_quality */
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_tilecomp_t;
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_tile {
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numcomps;			/* number of components in tile */
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_tilecomp_t *comps;	/* Components information */
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 numpix;				/* add fixed_quality */
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_FLOAT64 distotile;			/* add fixed_quality */
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_FLOAT64 distolayer[100];	/* add fixed_quality */
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 packno;              /* packet number */
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_tile_t;
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_image
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_tile_t *tiles;		/* Tiles information */
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_tcd_image_t;
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTile coder/decoder
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Position of the tilepart flag in Progression order*/
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 tp_pos;
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Tile part number*/
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tp_num;
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Current tile part number*/
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cur_tp_num;
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Total number of tileparts of the current tile*/
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cur_totnum_tp;
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Current Packet iterator number */
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cur_pino;
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** info on each image tile */
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_image_t *tcd_image;
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** image header */
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_image_t *image;
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** coding parameters */
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_cp_t *cp;
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** coding/decoding parameters common to all tiles */
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcp_t *tcp;
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** current encoded/decoded tile */
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tcd_tileno;
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tell if the tcd is a decoder. */
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 m_is_decoder : 1;
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_t;
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** @name Exported functions */
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@{*/
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ----------------------------------------------------------------------- */
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDump the content of a tcd structure
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);*/ /* TODO MSD shoul use the new v2 structures */
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCreate a new TCD handle
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param p_is_decoder FIXME DOC
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@return Returns a new TCD handle if successful returns NULL otherwise
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_tcd_t* opj_tcd_create(OPJ_BOOL p_is_decoder);
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDestroy a previously created TCD handle
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tcd TCD handle to destroy
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_tcd_destroy(opj_tcd_t *tcd);
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Initialize the tile coder and may reuse some memory.
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tcd		TCD handle.
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_image		raw image.
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_cp		coding parameters.
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return true if the encoding values could be set (false otherwise).
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_init(	opj_tcd_t *p_tcd,
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						opj_image_t * p_image,
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						opj_cp_t * p_cp );
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Allocates memory for decoding a specific tile.
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tcd		the tile decoder.
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_no	the index of the tile received in sequence. This not necessarily lead to the
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * tile at index p_tile_no.
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	true if the remaining data is sufficient.
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_init_decode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no);
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_UINT32 final);
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_tcd_rateallocate_fixed(opj_tcd_t *tcd);
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_tcd_makelayer(	opj_tcd_t *tcd,
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						OPJ_UINT32 layno,
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						OPJ_FLOAT64 thresh,
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						OPJ_UINT32 final);
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_rateallocate(	opj_tcd_t *tcd,
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								OPJ_BYTE *dest,
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								OPJ_UINT32 * p_data_written,
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								OPJ_UINT32 len,
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								opj_codestream_info_t *cstr_info);
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Gets the maximum tile size that will be taken by the tile once decoded.
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_UINT32 opj_tcd_get_decoded_tile_size (opj_tcd_t *p_tcd );
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Encodes a tile from the raw image into the given buffer.
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tcd			Tile Coder handle
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_no		Index of the tile to encode.
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_dest			Destination buffer
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_data_written	pointer to an int that is incremented by the number of bytes really written on p_dest
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_len			Maximum length of the destination buffer
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_cstr_info		Codestream information structure
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return  true if the coding is successfull.
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_encode_tile(   opj_tcd_t *p_tcd,
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 p_tile_no,
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_BYTE *p_dest,
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 * p_data_written,
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 p_len,
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    struct opj_codestream_info *p_cstr_info);
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDecode a tile from a buffer into a raw image
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tcd TCD handle
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param src Source buffer
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param len Length of source buffer
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tileno Number that identifies one of the tiles to be decoded
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param cstr_info  FIXME DOC
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_decode_tile(   opj_tcd_t *tcd,
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_BYTE *src,
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 len,
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 tileno,
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    opj_codestream_index_t *cstr_info);
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copies tile data from the system onto the given memory block.
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_update_tile_data (	opj_tcd_t *p_tcd,
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								    OPJ_BYTE * p_dest,
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								    OPJ_UINT32 p_dest_length );
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_UINT32 opj_tcd_get_encoded_tile_size ( opj_tcd_t *p_tcd );
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Initialize the tile coder and may reuse some meory.
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tcd		TCD handle.
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_no	current tile index to encode.
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return true if the encoding values could be set (false otherwise).
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_init_encode_tile (	opj_tcd_t *p_tcd,
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								    OPJ_UINT32 p_tile_no );
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copies tile data from the given memory block onto the system.
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_copy_tile_data (opj_tcd_t *p_tcd,
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 OPJ_BYTE * p_src,
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 OPJ_UINT32 p_src_length );
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ----------------------------------------------------------------------- */
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@}*/
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@}*/
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __TCD_H */
355