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