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 {
90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_BYTE* data;               /* Data */
91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	opj_tcd_layer_t* layers;      /* layer information */
92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	opj_tcd_pass_t* passes;       /* information about the passes */
93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet 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;
96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 data_size;         /* Size of allocated data buffer */
97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 numpasses;         /* number of pass already done for the code-blocks */
98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 numpassesinlayers; /* number of passes in the layer */
99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 totalpasses;	      /* total number of passes */
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_cblk_enc_t;
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_cblk_dec {
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_BYTE * data;				/* Data */
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_seg_t* segs;			/* segments information */
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* position of the code-blocks : left upper corner (x0, y0) right low corner (x1,y1) */
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numbps;
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numlenbits;
109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 data_max_size;		/* Size of allocated data buffer */
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 data_current_size;	/* Size of used data buffer */
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numnewpasses;		/* number of pass added to the code-blocks */
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numsegs;				/* number of segments */
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 real_num_segs;
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 m_current_max_segs;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_cblk_dec_t;
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_precinct {
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* dimension of the precinct : left upper corner (x0, y0) right low corner (x1,y1) */
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cw, ch;				/* number of precinct in width and height */
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	union{							/* code-blocks information */
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		opj_tcd_cblk_enc_t* enc;
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		opj_tcd_cblk_dec_t* dec;
126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		void*               blocks;
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	} cblks;
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 block_size;			/* size taken by cblks (in bytes) */
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tgt_tree_t *incltree;	    /* inclusion tree */
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tgt_tree_t *imsbtree;	    /* IMSB tree */
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_precinct_t;
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_band {
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* dimension of the subband : left upper corner (x0, y0) right low corner (x1,y1) */
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 bandno;
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_precinct_t *precincts;	/* precinct information */
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 precincts_data_size;	/* size of data taken by precincts */
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 numbps;
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_FLOAT32 stepsize;
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_band_t;
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_resolution {
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* dimension of the resolution level : left upper corner (x0, y0) right low corner (x1,y1) */
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 pw, ph;
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numbands;			/* number sub-band for the resolution level */
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_band_t bands[3];		/* subband information */
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_resolution_t;
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_tilecomp
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_INT32 x0, y0, x1, y1;           /* dimension of component : left upper corner (x0, y0) right low corner (x1,y1) */
161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 numresolutions;          /* number of resolutions level */
162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 minimum_num_resolutions; /* number of resolutions level to decode (at max)*/
163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	opj_tcd_resolution_t *resolutions;  /* resolutions information */
164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 resolutions_size;        /* size of data for resolutions (in bytes) */
165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_INT32 *data;                    /* data of the component */
166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_BOOL  ownsData;                 /* if true, then need to free after usage, otherwise do not free */
167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 data_size_needed;        /* we may either need to allocate this amount of data, or re-use image data and ignore this value */
168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 data_size;               /* size of the data of the component */
169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_INT32 numpix;                   /* add fixed_quality */
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_tilecomp_t;
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_tile {
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 x0, y0, x1, y1;		/* dimension of the tile : left upper corner (x0, y0) right low corner (x1,y1) */
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 numcomps;			/* number of components in tile */
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_tilecomp_t *comps;	/* Components information */
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 numpix;				/* add fixed_quality */
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_FLOAT64 distotile;			/* add fixed_quality */
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_FLOAT64 distolayer[100];	/* add fixed_quality */
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 packno;              /* packet number */
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_tile_t;
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFIXME DOC
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd_image
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_tile_t *tiles;		/* Tiles information */
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_tcd_image_t;
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTile coder/decoder
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_tcd
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Position of the tilepart flag in Progression order*/
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_INT32 tp_pos;
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Tile part number*/
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tp_num;
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Current tile part number*/
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cur_tp_num;
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Total number of tileparts of the current tile*/
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cur_totnum_tp;
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** Current Packet iterator number */
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 cur_pino;
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** info on each image tile */
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcd_image_t *tcd_image;
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** image header */
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_image_t *image;
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** coding parameters */
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_cp_t *cp;
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** coding/decoding parameters common to all tiles */
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_tcp_t *tcp;
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** current encoded/decoded tile */
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 tcd_tileno;
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** tell if the tcd is a decoder. */
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 m_is_decoder : 1;
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_tcd_t;
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** @name Exported functions */
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@{*/
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ----------------------------------------------------------------------- */
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDump the content of a tcd structure
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t *img);*/ /* TODO MSD shoul use the new v2 structures */
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCreate a new TCD handle
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param p_is_decoder FIXME DOC
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@return Returns a new TCD handle if successful returns NULL otherwise
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_tcd_t* opj_tcd_create(OPJ_BOOL p_is_decoder);
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDestroy a previously created TCD handle
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tcd TCD handle to destroy
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_tcd_destroy(opj_tcd_t *tcd);
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Initialize the tile coder and may reuse some memory.
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tcd		TCD handle.
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_image		raw image.
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_cp		coding parameters.
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return true if the encoding values could be set (false otherwise).
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_init(	opj_tcd_t *p_tcd,
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						opj_image_t * p_image,
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						opj_cp_t * p_cp );
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Allocates memory for decoding a specific tile.
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tcd		the tile decoder.
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_no	the index of the tile received in sequence. This not necessarily lead to the
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * tile at index p_tile_no.
265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * @param p_manager the event manager.
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return	true if the remaining data is sufficient.
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannOPJ_BOOL opj_tcd_init_decode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no, opj_event_mgr_t* p_manager);
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_UINT32 final);
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_tcd_rateallocate_fixed(opj_tcd_t *tcd);
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_tcd_makelayer(	opj_tcd_t *tcd,
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						OPJ_UINT32 layno,
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						OPJ_FLOAT64 thresh,
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						OPJ_UINT32 final);
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_rateallocate(	opj_tcd_t *tcd,
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								OPJ_BYTE *dest,
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								OPJ_UINT32 * p_data_written,
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								OPJ_UINT32 len,
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								opj_codestream_info_t *cstr_info);
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Gets the maximum tile size that will be taken by the tile once decoded.
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_UINT32 opj_tcd_get_decoded_tile_size (opj_tcd_t *p_tcd );
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Encodes a tile from the raw image into the given buffer.
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tcd			Tile Coder handle
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_no		Index of the tile to encode.
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_dest			Destination buffer
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_data_written	pointer to an int that is incremented by the number of bytes really written on p_dest
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_len			Maximum length of the destination buffer
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_cstr_info		Codestream information structure
299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * @return  true if the coding is successful.
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_encode_tile(   opj_tcd_t *p_tcd,
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 p_tile_no,
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_BYTE *p_dest,
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 * p_data_written,
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 p_len,
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    struct opj_codestream_info *p_cstr_info);
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDecode a tile from a buffer into a raw image
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tcd TCD handle
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param src Source buffer
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param len Length of source buffer
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tileno Number that identifies one of the tiles to be decoded
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param cstr_info  FIXME DOC
316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann@param manager the event manager.
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_decode_tile(   opj_tcd_t *tcd,
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_BYTE *src,
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 len,
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							    OPJ_UINT32 tileno,
322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann							    opj_codestream_index_t *cstr_info,
323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann							    opj_event_mgr_t *manager);
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copies tile data from the system onto the given memory block.
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_update_tile_data (	opj_tcd_t *p_tcd,
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								    OPJ_BYTE * p_dest,
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								    OPJ_UINT32 p_dest_length );
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_UINT32 opj_tcd_get_encoded_tile_size ( opj_tcd_t *p_tcd );
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Initialize the tile coder and may reuse some meory.
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tcd		TCD handle.
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param	p_tile_no	current tile index to encode.
343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * @param p_manager the event manager.
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return true if the encoding values could be set (false otherwise).
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_init_encode_tile (	opj_tcd_t *p_tcd,
348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann								    OPJ_UINT32 p_tile_no, opj_event_mgr_t* p_manager );
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copies tile data from the given memory block onto the system.
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_tcd_copy_tile_data (opj_tcd_t *p_tcd,
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 OPJ_BYTE * p_src,
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                 OPJ_UINT32 p_src_length );
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/**
358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * Allocates tile component data
359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov *
360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov *
361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov */
362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovOPJ_BOOL opj_alloc_tile_component_data(opj_tcd_tilecomp_t *l_tilec);
363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ----------------------------------------------------------------------- */
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@}*/
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@}*/
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __TCD_H */
370