1*3ac0a46fSAndroid Build Coastguard Worker /* 2*3ac0a46fSAndroid Build Coastguard Worker * The copyright in this software is being made available under the 2-clauses 3*3ac0a46fSAndroid Build Coastguard Worker * BSD License, included below. This software may be subject to other third 4*3ac0a46fSAndroid Build Coastguard Worker * party and contributor rights, including patent rights, and no such rights 5*3ac0a46fSAndroid Build Coastguard Worker * are granted under this license. 6*3ac0a46fSAndroid Build Coastguard Worker * 7*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium 8*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2002-2014, Professor Benoit Macq 9*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2001-2003, David Janssens 10*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2002-2003, Yannick Verschueren 11*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2003-2007, Francois-Olivier Devaux 12*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2003-2014, Antonin Descampe 13*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2005, Herve Drolon, FreeImage Team 14*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2006-2007, Parvatha Elangovan 15*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <[email protected]> 16*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France 17*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2012, CS Systemes d'Information, France 18*3ac0a46fSAndroid Build Coastguard Worker * 19*3ac0a46fSAndroid Build Coastguard Worker * All rights reserved. 20*3ac0a46fSAndroid Build Coastguard Worker * 21*3ac0a46fSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 22*3ac0a46fSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 23*3ac0a46fSAndroid Build Coastguard Worker * are met: 24*3ac0a46fSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 25*3ac0a46fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 26*3ac0a46fSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 27*3ac0a46fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 28*3ac0a46fSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 29*3ac0a46fSAndroid Build Coastguard Worker * 30*3ac0a46fSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 31*3ac0a46fSAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 32*3ac0a46fSAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 33*3ac0a46fSAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 34*3ac0a46fSAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 35*3ac0a46fSAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 36*3ac0a46fSAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 37*3ac0a46fSAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 38*3ac0a46fSAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 39*3ac0a46fSAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 40*3ac0a46fSAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE. 41*3ac0a46fSAndroid Build Coastguard Worker */ 42*3ac0a46fSAndroid Build Coastguard Worker #ifndef OPJ_J2K_H 43*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_J2K_H 44*3ac0a46fSAndroid Build Coastguard Worker /** 45*3ac0a46fSAndroid Build Coastguard Worker @file j2k.h 46*3ac0a46fSAndroid Build Coastguard Worker @brief The JPEG-2000 Codestream Reader/Writer (J2K) 47*3ac0a46fSAndroid Build Coastguard Worker 48*3ac0a46fSAndroid Build Coastguard Worker The functions in J2K.C have for goal to read/write the several parts of the codestream: markers and data. 49*3ac0a46fSAndroid Build Coastguard Worker */ 50*3ac0a46fSAndroid Build Coastguard Worker 51*3ac0a46fSAndroid Build Coastguard Worker /** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */ 52*3ac0a46fSAndroid Build Coastguard Worker /*@{*/ 53*3ac0a46fSAndroid Build Coastguard Worker 54*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CP_CSTY_PRT 0x01 55*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CP_CSTY_SOP 0x02 56*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CP_CSTY_EPH 0x04 57*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_CSTY_PRT 0x01 58*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_CBLKSTY_LAZY 0x01 /**< Selective arithmetic coding bypass */ 59*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_CBLKSTY_RESET 0x02 /**< Reset context probabilities on coding pass boundaries */ 60*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_CBLKSTY_TERMALL 0x04 /**< Termination on each coding pass */ 61*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_CBLKSTY_VSC 0x08 /**< Vertically stripe causal context */ 62*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_CBLKSTY_PTERM 0x10 /**< Predictable termination */ 63*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_CBLKSTY_SEGSYM 0x20 /**< Segmentation symbols are used */ 64*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_CBLKSTY_HT 0x40 /**< (high throughput) HT codeblocks */ 65*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_CBLKSTY_HTMIXED 0x80 /**< MIXED mode HT codeblocks */ 66*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_QNTSTY_NOQNT 0 67*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_QNTSTY_SIQNT 1 68*3ac0a46fSAndroid Build Coastguard Worker #define J2K_CCP_QNTSTY_SEQNT 2 69*3ac0a46fSAndroid Build Coastguard Worker 70*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 71*3ac0a46fSAndroid Build Coastguard Worker 72*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_SOC 0xff4f /**< SOC marker value */ 73*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_SOT 0xff90 /**< SOT marker value */ 74*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_SOD 0xff93 /**< SOD marker value */ 75*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_EOC 0xffd9 /**< EOC marker value */ 76*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_CAP 0xff50 /**< CAP marker value */ 77*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_SIZ 0xff51 /**< SIZ marker value */ 78*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_COD 0xff52 /**< COD marker value */ 79*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_COC 0xff53 /**< COC marker value */ 80*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_CPF 0xff59 /**< CPF marker value */ 81*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_RGN 0xff5e /**< RGN marker value */ 82*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_QCD 0xff5c /**< QCD marker value */ 83*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_QCC 0xff5d /**< QCC marker value */ 84*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_POC 0xff5f /**< POC marker value */ 85*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_TLM 0xff55 /**< TLM marker value */ 86*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_PLM 0xff57 /**< PLM marker value */ 87*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_PLT 0xff58 /**< PLT marker value */ 88*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_PPM 0xff60 /**< PPM marker value */ 89*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_PPT 0xff61 /**< PPT marker value */ 90*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_SOP 0xff91 /**< SOP marker value */ 91*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_EPH 0xff92 /**< EPH marker value */ 92*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_CRG 0xff63 /**< CRG marker value */ 93*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_COM 0xff64 /**< COM marker value */ 94*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_CBD 0xff78 /**< CBD marker value */ 95*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_MCC 0xff75 /**< MCC marker value */ 96*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_MCT 0xff74 /**< MCT marker value */ 97*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_MCO 0xff77 /**< MCO marker value */ 98*3ac0a46fSAndroid Build Coastguard Worker 99*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_UNK 0 /**< UNKNOWN marker value */ 100*3ac0a46fSAndroid Build Coastguard Worker 101*3ac0a46fSAndroid Build Coastguard Worker /* UniPG>> */ 102*3ac0a46fSAndroid Build Coastguard Worker #ifdef USE_JPWL 103*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_EPC 0xff68 /**< EPC marker value (Part 11: JPEG 2000 for Wireless) */ 104*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_EPB 0xff66 /**< EPB marker value (Part 11: JPEG 2000 for Wireless) */ 105*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_ESD 0xff67 /**< ESD marker value (Part 11: JPEG 2000 for Wireless) */ 106*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_RED 0xff69 /**< RED marker value (Part 11: JPEG 2000 for Wireless) */ 107*3ac0a46fSAndroid Build Coastguard Worker #endif /* USE_JPWL */ 108*3ac0a46fSAndroid Build Coastguard Worker #ifdef USE_JPSEC 109*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_SEC 0xff65 /**< SEC marker value (Part 8: Secure JPEG 2000) */ 110*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MS_INSEC 0xff94 /**< INSEC marker value (Part 8: Secure JPEG 2000) */ 111*3ac0a46fSAndroid Build Coastguard Worker #endif /* USE_JPSEC */ 112*3ac0a46fSAndroid Build Coastguard Worker /* <<UniPG */ 113*3ac0a46fSAndroid Build Coastguard Worker 114*3ac0a46fSAndroid Build Coastguard Worker #define J2K_MAX_POCS 32 /**< Maximum number of POCs */ 115*3ac0a46fSAndroid Build Coastguard Worker 116*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 117*3ac0a46fSAndroid Build Coastguard Worker 118*3ac0a46fSAndroid Build Coastguard Worker /** 119*3ac0a46fSAndroid Build Coastguard Worker * Values that specify the status of the decoding process when decoding the main header. 120*3ac0a46fSAndroid Build Coastguard Worker * These values may be combined with a | operator. 121*3ac0a46fSAndroid Build Coastguard Worker * */ 122*3ac0a46fSAndroid Build Coastguard Worker typedef enum J2K_STATUS { 123*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_NONE = 0x0000, /**< a SOC marker is expected */ 124*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_MHSOC = 0x0001, /**< a SOC marker is expected */ 125*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_MHSIZ = 0x0002, /**< a SIZ marker is expected */ 126*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_MH = 0x0004, /**< the decoding process is in the main header */ 127*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_TPHSOT = 0x0008, /**< the decoding process is in a tile part header and expects a SOT marker */ 128*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_TPH = 0x0010, /**< the decoding process is in a tile part header */ 129*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_MT = 0x0020, /**< the EOC marker has just been read */ 130*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_NEOC = 0x0040, /**< the decoding process must not expect a EOC marker because the codestream is truncated */ 131*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_DATA = 0x0080, /**< a tile header has been successfully read and codestream is expected */ 132*3ac0a46fSAndroid Build Coastguard Worker 133*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_EOC = 0x0100, /**< the decoding process has encountered the EOC marker */ 134*3ac0a46fSAndroid Build Coastguard Worker J2K_STATE_ERR = 0x8000 /**< the decoding process has encountered an error (FIXME warning V1 = 0x0080)*/ 135*3ac0a46fSAndroid Build Coastguard Worker } J2K_STATUS; 136*3ac0a46fSAndroid Build Coastguard Worker 137*3ac0a46fSAndroid Build Coastguard Worker /** 138*3ac0a46fSAndroid Build Coastguard Worker * Type of elements storing in the MCT data 139*3ac0a46fSAndroid Build Coastguard Worker */ 140*3ac0a46fSAndroid Build Coastguard Worker typedef enum MCT_ELEMENT_TYPE { 141*3ac0a46fSAndroid Build Coastguard Worker MCT_TYPE_INT16 = 0, /** MCT data is stored as signed shorts*/ 142*3ac0a46fSAndroid Build Coastguard Worker MCT_TYPE_INT32 = 1, /** MCT data is stored as signed integers*/ 143*3ac0a46fSAndroid Build Coastguard Worker MCT_TYPE_FLOAT = 2, /** MCT data is stored as floats*/ 144*3ac0a46fSAndroid Build Coastguard Worker MCT_TYPE_DOUBLE = 3 /** MCT data is stored as doubles*/ 145*3ac0a46fSAndroid Build Coastguard Worker } J2K_MCT_ELEMENT_TYPE; 146*3ac0a46fSAndroid Build Coastguard Worker 147*3ac0a46fSAndroid Build Coastguard Worker /** 148*3ac0a46fSAndroid Build Coastguard Worker * Type of MCT array 149*3ac0a46fSAndroid Build Coastguard Worker */ 150*3ac0a46fSAndroid Build Coastguard Worker typedef enum MCT_ARRAY_TYPE { 151*3ac0a46fSAndroid Build Coastguard Worker MCT_TYPE_DEPENDENCY = 0, 152*3ac0a46fSAndroid Build Coastguard Worker MCT_TYPE_DECORRELATION = 1, 153*3ac0a46fSAndroid Build Coastguard Worker MCT_TYPE_OFFSET = 2 154*3ac0a46fSAndroid Build Coastguard Worker } J2K_MCT_ARRAY_TYPE; 155*3ac0a46fSAndroid Build Coastguard Worker 156*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 157*3ac0a46fSAndroid Build Coastguard Worker 158*3ac0a46fSAndroid Build Coastguard Worker /** 159*3ac0a46fSAndroid Build Coastguard Worker T2 encoding mode 160*3ac0a46fSAndroid Build Coastguard Worker */ 161*3ac0a46fSAndroid Build Coastguard Worker typedef enum T2_MODE { 162*3ac0a46fSAndroid Build Coastguard Worker THRESH_CALC = 0, /** Function called in Rate allocation process*/ 163*3ac0a46fSAndroid Build Coastguard Worker FINAL_PASS = 1 /** Function called in Tier 2 process*/ 164*3ac0a46fSAndroid Build Coastguard Worker } J2K_T2_MODE; 165*3ac0a46fSAndroid Build Coastguard Worker 166*3ac0a46fSAndroid Build Coastguard Worker /** 167*3ac0a46fSAndroid Build Coastguard Worker * Quantization stepsize 168*3ac0a46fSAndroid Build Coastguard Worker */ 169*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_stepsize { 170*3ac0a46fSAndroid Build Coastguard Worker /** exponent */ 171*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 expn; 172*3ac0a46fSAndroid Build Coastguard Worker /** mantissa */ 173*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 mant; 174*3ac0a46fSAndroid Build Coastguard Worker } opj_stepsize_t; 175*3ac0a46fSAndroid Build Coastguard Worker 176*3ac0a46fSAndroid Build Coastguard Worker /** 177*3ac0a46fSAndroid Build Coastguard Worker Tile-component coding parameters 178*3ac0a46fSAndroid Build Coastguard Worker */ 179*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_tccp { 180*3ac0a46fSAndroid Build Coastguard Worker /** coding style */ 181*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 csty; 182*3ac0a46fSAndroid Build Coastguard Worker /** number of resolutions */ 183*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numresolutions; 184*3ac0a46fSAndroid Build Coastguard Worker /** code-blocks width */ 185*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 cblkw; 186*3ac0a46fSAndroid Build Coastguard Worker /** code-blocks height */ 187*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 cblkh; 188*3ac0a46fSAndroid Build Coastguard Worker /** code-block coding style */ 189*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 cblksty; 190*3ac0a46fSAndroid Build Coastguard Worker /** discrete wavelet transform identifier */ 191*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 qmfbid; 192*3ac0a46fSAndroid Build Coastguard Worker /** quantisation style */ 193*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 qntsty; 194*3ac0a46fSAndroid Build Coastguard Worker /** stepsizes used for quantization */ 195*3ac0a46fSAndroid Build Coastguard Worker opj_stepsize_t stepsizes[OPJ_J2K_MAXBANDS]; 196*3ac0a46fSAndroid Build Coastguard Worker /** number of guard bits */ 197*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numgbits; 198*3ac0a46fSAndroid Build Coastguard Worker /** Region Of Interest shift */ 199*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 roishift; 200*3ac0a46fSAndroid Build Coastguard Worker /** precinct width */ 201*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 prcw[OPJ_J2K_MAXRLVLS]; 202*3ac0a46fSAndroid Build Coastguard Worker /** precinct height */ 203*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 prch[OPJ_J2K_MAXRLVLS]; 204*3ac0a46fSAndroid Build Coastguard Worker /** the dc_level_shift **/ 205*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 m_dc_level_shift; 206*3ac0a46fSAndroid Build Coastguard Worker } 207*3ac0a46fSAndroid Build Coastguard Worker opj_tccp_t; 208*3ac0a46fSAndroid Build Coastguard Worker 209*3ac0a46fSAndroid Build Coastguard Worker 210*3ac0a46fSAndroid Build Coastguard Worker 211*3ac0a46fSAndroid Build Coastguard Worker /** 212*3ac0a46fSAndroid Build Coastguard Worker * FIXME DOC 213*3ac0a46fSAndroid Build Coastguard Worker */ 214*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_mct_data { 215*3ac0a46fSAndroid Build Coastguard Worker J2K_MCT_ELEMENT_TYPE m_element_type; 216*3ac0a46fSAndroid Build Coastguard Worker J2K_MCT_ARRAY_TYPE m_array_type; 217*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_index; 218*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * m_data; 219*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_data_size; 220*3ac0a46fSAndroid Build Coastguard Worker } 221*3ac0a46fSAndroid Build Coastguard Worker opj_mct_data_t; 222*3ac0a46fSAndroid Build Coastguard Worker 223*3ac0a46fSAndroid Build Coastguard Worker /** 224*3ac0a46fSAndroid Build Coastguard Worker * FIXME DOC 225*3ac0a46fSAndroid Build Coastguard Worker */ 226*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_simple_mcc_decorrelation_data { 227*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_index; 228*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_nb_comps; 229*3ac0a46fSAndroid Build Coastguard Worker opj_mct_data_t * m_decorrelation_array; 230*3ac0a46fSAndroid Build Coastguard Worker opj_mct_data_t * m_offset_array; 231*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_is_irreversible : 1; 232*3ac0a46fSAndroid Build Coastguard Worker } 233*3ac0a46fSAndroid Build Coastguard Worker opj_simple_mcc_decorrelation_data_t; 234*3ac0a46fSAndroid Build Coastguard Worker 235*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_ppx_struct { 236*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE* m_data; /* m_data == NULL => Zppx not read yet */ 237*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_data_size; 238*3ac0a46fSAndroid Build Coastguard Worker } opj_ppx; 239*3ac0a46fSAndroid Build Coastguard Worker 240*3ac0a46fSAndroid Build Coastguard Worker /** 241*3ac0a46fSAndroid Build Coastguard Worker Tile coding parameters : 242*3ac0a46fSAndroid Build Coastguard Worker this structure is used to store coding/decoding parameters common to all 243*3ac0a46fSAndroid Build Coastguard Worker tiles (information like COD, COC in main header) 244*3ac0a46fSAndroid Build Coastguard Worker */ 245*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_tcp { 246*3ac0a46fSAndroid Build Coastguard Worker /** coding style */ 247*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 csty; 248*3ac0a46fSAndroid Build Coastguard Worker /** progression order */ 249*3ac0a46fSAndroid Build Coastguard Worker OPJ_PROG_ORDER prg; 250*3ac0a46fSAndroid Build Coastguard Worker /** number of layers */ 251*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numlayers; 252*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 num_layers_to_decode; 253*3ac0a46fSAndroid Build Coastguard Worker /** multi-component transform identifier */ 254*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 mct; 255*3ac0a46fSAndroid Build Coastguard Worker /** rates of layers */ 256*3ac0a46fSAndroid Build Coastguard Worker OPJ_FLOAT32 rates[100]; 257*3ac0a46fSAndroid Build Coastguard Worker /** number of progression order changes */ 258*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numpocs; 259*3ac0a46fSAndroid Build Coastguard Worker /** progression order changes */ 260*3ac0a46fSAndroid Build Coastguard Worker opj_poc_t pocs[J2K_MAX_POCS]; 261*3ac0a46fSAndroid Build Coastguard Worker 262*3ac0a46fSAndroid Build Coastguard Worker /** number of ppt markers (reserved size) */ 263*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ppt_markers_count; 264*3ac0a46fSAndroid Build Coastguard Worker /** ppt markers data (table indexed by Zppt) */ 265*3ac0a46fSAndroid Build Coastguard Worker opj_ppx* ppt_markers; 266*3ac0a46fSAndroid Build Coastguard Worker 267*3ac0a46fSAndroid Build Coastguard Worker /** packet header store there for future use in t2_decode_packet */ 268*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *ppt_data; 269*3ac0a46fSAndroid Build Coastguard Worker /** used to keep a track of the allocated memory */ 270*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *ppt_buffer; 271*3ac0a46fSAndroid Build Coastguard Worker /** Number of bytes stored inside ppt_data*/ 272*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ppt_data_size; 273*3ac0a46fSAndroid Build Coastguard Worker /** size of ppt_data*/ 274*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ppt_len; 275*3ac0a46fSAndroid Build Coastguard Worker /** add fixed_quality */ 276*3ac0a46fSAndroid Build Coastguard Worker OPJ_FLOAT32 distoratio[100]; 277*3ac0a46fSAndroid Build Coastguard Worker /** tile-component coding parameters */ 278*3ac0a46fSAndroid Build Coastguard Worker opj_tccp_t *tccps; 279*3ac0a46fSAndroid Build Coastguard Worker /** current tile part number or -1 if first time into this tile */ 280*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 m_current_tile_part_number; 281*3ac0a46fSAndroid Build Coastguard Worker /** number of tile parts for the tile. */ 282*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_nb_tile_parts; 283*3ac0a46fSAndroid Build Coastguard Worker /** data for the tile */ 284*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * m_data; 285*3ac0a46fSAndroid Build Coastguard Worker /** size of data */ 286*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_data_size; 287*3ac0a46fSAndroid Build Coastguard Worker /** encoding norms */ 288*3ac0a46fSAndroid Build Coastguard Worker OPJ_FLOAT64 * mct_norms; 289*3ac0a46fSAndroid Build Coastguard Worker /** the mct decoding matrix */ 290*3ac0a46fSAndroid Build Coastguard Worker OPJ_FLOAT32 * m_mct_decoding_matrix; 291*3ac0a46fSAndroid Build Coastguard Worker /** the mct coding matrix */ 292*3ac0a46fSAndroid Build Coastguard Worker OPJ_FLOAT32 * m_mct_coding_matrix; 293*3ac0a46fSAndroid Build Coastguard Worker /** mct records */ 294*3ac0a46fSAndroid Build Coastguard Worker opj_mct_data_t * m_mct_records; 295*3ac0a46fSAndroid Build Coastguard Worker /** the number of mct records. */ 296*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_nb_mct_records; 297*3ac0a46fSAndroid Build Coastguard Worker /** the max number of mct records. */ 298*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_nb_max_mct_records; 299*3ac0a46fSAndroid Build Coastguard Worker /** mcc records */ 300*3ac0a46fSAndroid Build Coastguard Worker opj_simple_mcc_decorrelation_data_t * m_mcc_records; 301*3ac0a46fSAndroid Build Coastguard Worker /** the number of mct records. */ 302*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_nb_mcc_records; 303*3ac0a46fSAndroid Build Coastguard Worker /** the max number of mct records. */ 304*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_nb_max_mcc_records; 305*3ac0a46fSAndroid Build Coastguard Worker 306*3ac0a46fSAndroid Build Coastguard Worker 307*3ac0a46fSAndroid Build Coastguard Worker /***** FLAGS *******/ 308*3ac0a46fSAndroid Build Coastguard Worker /** If cod == 1 --> there was a COD marker for the present tile */ 309*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD cod : 1; 310*3ac0a46fSAndroid Build Coastguard Worker /** If ppt == 1 --> there was a PPT marker for the present tile */ 311*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD ppt : 1; 312*3ac0a46fSAndroid Build Coastguard Worker /** indicates if a POC marker has been used O:NO, 1:YES */ 313*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD POC : 1; 314*3ac0a46fSAndroid Build Coastguard Worker } opj_tcp_t; 315*3ac0a46fSAndroid Build Coastguard Worker 316*3ac0a46fSAndroid Build Coastguard Worker 317*3ac0a46fSAndroid Build Coastguard Worker 318*3ac0a46fSAndroid Build Coastguard Worker 319*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_encoding_param { 320*3ac0a46fSAndroid Build Coastguard Worker /** Maximum rate for each component. If == 0, component size limitation is not considered */ 321*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_max_comp_size; 322*3ac0a46fSAndroid Build Coastguard Worker /** Position of tile part flag in progression order*/ 323*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 m_tp_pos; 324*3ac0a46fSAndroid Build Coastguard Worker /** fixed layer */ 325*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 *m_matrice; 326*3ac0a46fSAndroid Build Coastguard Worker /** Flag determining tile part generation*/ 327*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE m_tp_flag; 328*3ac0a46fSAndroid Build Coastguard Worker /** allocation by rate/distortion */ 329*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_disto_alloc : 1; 330*3ac0a46fSAndroid Build Coastguard Worker /** allocation by fixed layer */ 331*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_fixed_alloc : 1; 332*3ac0a46fSAndroid Build Coastguard Worker /** add fixed_quality */ 333*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_fixed_quality : 1; 334*3ac0a46fSAndroid Build Coastguard Worker /** Enabling Tile part generation*/ 335*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_tp_on : 1; 336*3ac0a46fSAndroid Build Coastguard Worker } 337*3ac0a46fSAndroid Build Coastguard Worker opj_encoding_param_t; 338*3ac0a46fSAndroid Build Coastguard Worker 339*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_decoding_param { 340*3ac0a46fSAndroid Build Coastguard Worker /** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */ 341*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_reduce; 342*3ac0a46fSAndroid Build Coastguard Worker /** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */ 343*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_layer; 344*3ac0a46fSAndroid Build Coastguard Worker } 345*3ac0a46fSAndroid Build Coastguard Worker opj_decoding_param_t; 346*3ac0a46fSAndroid Build Coastguard Worker 347*3ac0a46fSAndroid Build Coastguard Worker 348*3ac0a46fSAndroid Build Coastguard Worker /** 349*3ac0a46fSAndroid Build Coastguard Worker * Coding parameters 350*3ac0a46fSAndroid Build Coastguard Worker */ 351*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_cp { 352*3ac0a46fSAndroid Build Coastguard Worker /** Size of the image in bits*/ 353*3ac0a46fSAndroid Build Coastguard Worker /*int img_size;*/ 354*3ac0a46fSAndroid Build Coastguard Worker /** Rsiz*/ 355*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT16 rsiz; 356*3ac0a46fSAndroid Build Coastguard Worker /** XTOsiz */ 357*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tx0; /* MSD see norm */ 358*3ac0a46fSAndroid Build Coastguard Worker /** YTOsiz */ 359*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ty0; /* MSD see norm */ 360*3ac0a46fSAndroid Build Coastguard Worker /** XTsiz */ 361*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tdx; 362*3ac0a46fSAndroid Build Coastguard Worker /** YTsiz */ 363*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tdy; 364*3ac0a46fSAndroid Build Coastguard Worker /** comment */ 365*3ac0a46fSAndroid Build Coastguard Worker OPJ_CHAR *comment; 366*3ac0a46fSAndroid Build Coastguard Worker /** number of tiles in width */ 367*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tw; 368*3ac0a46fSAndroid Build Coastguard Worker /** number of tiles in height */ 369*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 th; 370*3ac0a46fSAndroid Build Coastguard Worker 371*3ac0a46fSAndroid Build Coastguard Worker /** number of ppm markers (reserved size) */ 372*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ppm_markers_count; 373*3ac0a46fSAndroid Build Coastguard Worker /** ppm markers data (table indexed by Zppm) */ 374*3ac0a46fSAndroid Build Coastguard Worker opj_ppx* ppm_markers; 375*3ac0a46fSAndroid Build Coastguard Worker 376*3ac0a46fSAndroid Build Coastguard Worker /** packet header store there for future use in t2_decode_packet */ 377*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *ppm_data; 378*3ac0a46fSAndroid Build Coastguard Worker /** size of the ppm_data*/ 379*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ppm_len; 380*3ac0a46fSAndroid Build Coastguard Worker /** size of the ppm_data*/ 381*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ppm_data_read; 382*3ac0a46fSAndroid Build Coastguard Worker 383*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *ppm_data_current; 384*3ac0a46fSAndroid Build Coastguard Worker 385*3ac0a46fSAndroid Build Coastguard Worker /** packet header storage original buffer */ 386*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *ppm_buffer; 387*3ac0a46fSAndroid Build Coastguard Worker /** pointer remaining on the first byte of the first header if ppm is used */ 388*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *ppm_data_first; 389*3ac0a46fSAndroid Build Coastguard Worker /** Number of bytes actually stored inside the ppm_data */ 390*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ppm_data_size; 391*3ac0a46fSAndroid Build Coastguard Worker /** use in case of multiple marker PPM (number of info already store) */ 392*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 ppm_store; 393*3ac0a46fSAndroid Build Coastguard Worker /** use in case of multiple marker PPM (case on non-finished previous info) */ 394*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 ppm_previous; 395*3ac0a46fSAndroid Build Coastguard Worker 396*3ac0a46fSAndroid Build Coastguard Worker /** tile coding parameters */ 397*3ac0a46fSAndroid Build Coastguard Worker opj_tcp_t *tcps; 398*3ac0a46fSAndroid Build Coastguard Worker 399*3ac0a46fSAndroid Build Coastguard Worker union { 400*3ac0a46fSAndroid Build Coastguard Worker opj_decoding_param_t m_dec; 401*3ac0a46fSAndroid Build Coastguard Worker opj_encoding_param_t m_enc; 402*3ac0a46fSAndroid Build Coastguard Worker } 403*3ac0a46fSAndroid Build Coastguard Worker m_specific_param; 404*3ac0a46fSAndroid Build Coastguard Worker 405*3ac0a46fSAndroid Build Coastguard Worker /** OPJ_TRUE if entire bit stream must be decoded, OPJ_FALSE if partial bitstream decoding allowed */ 406*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL strict; 407*3ac0a46fSAndroid Build Coastguard Worker 408*3ac0a46fSAndroid Build Coastguard Worker /* UniPG>> */ 409*3ac0a46fSAndroid Build Coastguard Worker #ifdef USE_JPWL 410*3ac0a46fSAndroid Build Coastguard Worker /** enables writing of EPC in MH, thus activating JPWL */ 411*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL epc_on; 412*3ac0a46fSAndroid Build Coastguard Worker /** enables writing of EPB, in case of activated JPWL */ 413*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL epb_on; 414*3ac0a46fSAndroid Build Coastguard Worker /** enables writing of ESD, in case of activated JPWL */ 415*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL esd_on; 416*3ac0a46fSAndroid Build Coastguard Worker /** enables writing of informative techniques of ESD, in case of activated JPWL */ 417*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL info_on; 418*3ac0a46fSAndroid Build Coastguard Worker /** enables writing of RED, in case of activated JPWL */ 419*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL red_on; 420*3ac0a46fSAndroid Build Coastguard Worker /** error protection method for MH (0,1,16,32,37-128) */ 421*3ac0a46fSAndroid Build Coastguard Worker int hprot_MH; 422*3ac0a46fSAndroid Build Coastguard Worker /** tile number of header protection specification (>=0) */ 423*3ac0a46fSAndroid Build Coastguard Worker int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS]; 424*3ac0a46fSAndroid Build Coastguard Worker /** error protection methods for TPHs (0,1,16,32,37-128) */ 425*3ac0a46fSAndroid Build Coastguard Worker int hprot_TPH[JPWL_MAX_NO_TILESPECS]; 426*3ac0a46fSAndroid Build Coastguard Worker /** tile number of packet protection specification (>=0) */ 427*3ac0a46fSAndroid Build Coastguard Worker int pprot_tileno[JPWL_MAX_NO_PACKSPECS]; 428*3ac0a46fSAndroid Build Coastguard Worker /** packet number of packet protection specification (>=0) */ 429*3ac0a46fSAndroid Build Coastguard Worker int pprot_packno[JPWL_MAX_NO_PACKSPECS]; 430*3ac0a46fSAndroid Build Coastguard Worker /** error protection methods for packets (0,1,16,32,37-128) */ 431*3ac0a46fSAndroid Build Coastguard Worker int pprot[JPWL_MAX_NO_PACKSPECS]; 432*3ac0a46fSAndroid Build Coastguard Worker /** enables writing of ESD, (0/2/4 bytes) */ 433*3ac0a46fSAndroid Build Coastguard Worker int sens_size; 434*3ac0a46fSAndroid Build Coastguard Worker /** sensitivity addressing size (0=auto/2/4 bytes) */ 435*3ac0a46fSAndroid Build Coastguard Worker int sens_addr; 436*3ac0a46fSAndroid Build Coastguard Worker /** sensitivity range (0-3) */ 437*3ac0a46fSAndroid Build Coastguard Worker int sens_range; 438*3ac0a46fSAndroid Build Coastguard Worker /** sensitivity method for MH (-1,0-7) */ 439*3ac0a46fSAndroid Build Coastguard Worker int sens_MH; 440*3ac0a46fSAndroid Build Coastguard Worker /** tile number of sensitivity specification (>=0) */ 441*3ac0a46fSAndroid Build Coastguard Worker int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS]; 442*3ac0a46fSAndroid Build Coastguard Worker /** sensitivity methods for TPHs (-1,0-7) */ 443*3ac0a46fSAndroid Build Coastguard Worker int sens_TPH[JPWL_MAX_NO_TILESPECS]; 444*3ac0a46fSAndroid Build Coastguard Worker /** enables JPWL correction at the decoder */ 445*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL correct; 446*3ac0a46fSAndroid Build Coastguard Worker /** expected number of components at the decoder */ 447*3ac0a46fSAndroid Build Coastguard Worker int exp_comps; 448*3ac0a46fSAndroid Build Coastguard Worker /** maximum number of tiles at the decoder */ 449*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 max_tiles; 450*3ac0a46fSAndroid Build Coastguard Worker #endif /* USE_JPWL */ 451*3ac0a46fSAndroid Build Coastguard Worker 452*3ac0a46fSAndroid Build Coastguard Worker /******** FLAGS *********/ 453*3ac0a46fSAndroid Build Coastguard Worker /** if ppm == 1 --> there was a PPM marker*/ 454*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD ppm : 1; 455*3ac0a46fSAndroid Build Coastguard Worker /** tells if the parameter is a coding or decoding one */ 456*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_is_decoder : 1; 457*3ac0a46fSAndroid Build Coastguard Worker /** whether different bit depth or sign per component is allowed. Decoder only for ow */ 458*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD allow_different_bit_depth_sign : 1; 459*3ac0a46fSAndroid Build Coastguard Worker /* <<UniPG */ 460*3ac0a46fSAndroid Build Coastguard Worker } opj_cp_t; 461*3ac0a46fSAndroid Build Coastguard Worker 462*3ac0a46fSAndroid Build Coastguard Worker 463*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_j2k_dec { 464*3ac0a46fSAndroid Build Coastguard Worker /** locate in which part of the codestream the decoder is (main header, tile header, end) */ 465*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_state; 466*3ac0a46fSAndroid Build Coastguard Worker /** 467*3ac0a46fSAndroid Build Coastguard Worker * store decoding parameters common to all tiles (information like COD, COC in main header) 468*3ac0a46fSAndroid Build Coastguard Worker */ 469*3ac0a46fSAndroid Build Coastguard Worker opj_tcp_t *m_default_tcp; 470*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *m_header_data; 471*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_header_data_size; 472*3ac0a46fSAndroid Build Coastguard Worker /** to tell the tile part length */ 473*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_sot_length; 474*3ac0a46fSAndroid Build Coastguard Worker /** Only tiles index in the correct range will be decoded.*/ 475*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_start_tile_x; 476*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_start_tile_y; 477*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_end_tile_x; 478*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_end_tile_y; 479*3ac0a46fSAndroid Build Coastguard Worker 480*3ac0a46fSAndroid Build Coastguard Worker /** Index of the tile to decode (used in get_tile) */ 481*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 m_tile_ind_to_dec; 482*3ac0a46fSAndroid Build Coastguard Worker /** Position of the last SOT marker read */ 483*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T m_last_sot_read_pos; 484*3ac0a46fSAndroid Build Coastguard Worker 485*3ac0a46fSAndroid Build Coastguard Worker /** 486*3ac0a46fSAndroid Build Coastguard Worker * Indicate that the current tile-part is assume as the last tile part of the codestream. 487*3ac0a46fSAndroid Build Coastguard Worker * It is useful in the case of PSot is equal to zero. The sot length will be compute in the 488*3ac0a46fSAndroid Build Coastguard Worker * SOD reader function. FIXME NOT USED for the moment 489*3ac0a46fSAndroid Build Coastguard Worker */ 490*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL m_last_tile_part; 491*3ac0a46fSAndroid Build Coastguard Worker 492*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_numcomps_to_decode; 493*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 *m_comps_indices_to_decode; 494*3ac0a46fSAndroid Build Coastguard Worker 495*3ac0a46fSAndroid Build Coastguard Worker /** to tell that a tile can be decoded. */ 496*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_can_decode : 1; 497*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_discard_tiles : 1; 498*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_skip_data : 1; 499*3ac0a46fSAndroid Build Coastguard Worker /** TNsot correction : see issue 254 **/ 500*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_nb_tile_parts_correction_checked : 1; 501*3ac0a46fSAndroid Build Coastguard Worker OPJ_BITFIELD m_nb_tile_parts_correction : 1; 502*3ac0a46fSAndroid Build Coastguard Worker 503*3ac0a46fSAndroid Build Coastguard Worker } opj_j2k_dec_t; 504*3ac0a46fSAndroid Build Coastguard Worker 505*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_j2k_enc { 506*3ac0a46fSAndroid Build Coastguard Worker /** Tile part number, regardless of poc, for each new poc, tp is reset to 1*/ 507*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_current_poc_tile_part_number; /* tp_num */ 508*3ac0a46fSAndroid Build Coastguard Worker 509*3ac0a46fSAndroid Build Coastguard Worker /** Tile part number currently coding, taking into account POC. m_current_tile_part_number holds the total number of tile parts while encoding the last tile part.*/ 510*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_current_tile_part_number; /*cur_tp_num */ 511*3ac0a46fSAndroid Build Coastguard Worker 512*3ac0a46fSAndroid Build Coastguard Worker /* whether to generate TLM markers */ 513*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL m_TLM; 514*3ac0a46fSAndroid Build Coastguard Worker 515*3ac0a46fSAndroid Build Coastguard Worker /* whether the Ttlmi field in a TLM marker is a byte (otherwise a uint16) */ 516*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL m_Ttlmi_is_byte; 517*3ac0a46fSAndroid Build Coastguard Worker 518*3ac0a46fSAndroid Build Coastguard Worker /** 519*3ac0a46fSAndroid Build Coastguard Worker locate the start position of the TLM marker 520*3ac0a46fSAndroid Build Coastguard Worker after encoding the tilepart, a jump (in j2k_write_sod) is done to the TLM marker to store the value of its length. 521*3ac0a46fSAndroid Build Coastguard Worker */ 522*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T m_tlm_start; 523*3ac0a46fSAndroid Build Coastguard Worker /** 524*3ac0a46fSAndroid Build Coastguard Worker * Stores the sizes of the tlm. 525*3ac0a46fSAndroid Build Coastguard Worker */ 526*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * m_tlm_sot_offsets_buffer; 527*3ac0a46fSAndroid Build Coastguard Worker /** 528*3ac0a46fSAndroid Build Coastguard Worker * The current offset of the tlm buffer. 529*3ac0a46fSAndroid Build Coastguard Worker */ 530*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * m_tlm_sot_offsets_current; 531*3ac0a46fSAndroid Build Coastguard Worker 532*3ac0a46fSAndroid Build Coastguard Worker /** Total num of tile parts in whole image = num tiles* num tileparts in each tile*/ 533*3ac0a46fSAndroid Build Coastguard Worker /** used in TLMmarker*/ 534*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_total_tile_parts; /* totnum_tp */ 535*3ac0a46fSAndroid Build Coastguard Worker 536*3ac0a46fSAndroid Build Coastguard Worker /* encoded data for a tile */ 537*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * m_encoded_tile_data; 538*3ac0a46fSAndroid Build Coastguard Worker 539*3ac0a46fSAndroid Build Coastguard Worker /* size of the encoded_data */ 540*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_encoded_tile_size; 541*3ac0a46fSAndroid Build Coastguard Worker 542*3ac0a46fSAndroid Build Coastguard Worker /* encoded data for a tile */ 543*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * m_header_tile_data; 544*3ac0a46fSAndroid Build Coastguard Worker 545*3ac0a46fSAndroid Build Coastguard Worker /* size of the encoded_data */ 546*3ac0a46fSAndroid Build Coastguard Worker 547*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_header_tile_data_size; 548*3ac0a46fSAndroid Build Coastguard Worker 549*3ac0a46fSAndroid Build Coastguard Worker /* whether to generate PLT markers */ 550*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL m_PLT; 551*3ac0a46fSAndroid Build Coastguard Worker 552*3ac0a46fSAndroid Build Coastguard Worker /* reserved bytes in m_encoded_tile_size for PLT markers */ 553*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_reserved_bytes_for_PLT; 554*3ac0a46fSAndroid Build Coastguard Worker 555*3ac0a46fSAndroid Build Coastguard Worker /** Number of components */ 556*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_nb_comps; 557*3ac0a46fSAndroid Build Coastguard Worker 558*3ac0a46fSAndroid Build Coastguard Worker } opj_j2k_enc_t; 559*3ac0a46fSAndroid Build Coastguard Worker 560*3ac0a46fSAndroid Build Coastguard Worker 561*3ac0a46fSAndroid Build Coastguard Worker 562*3ac0a46fSAndroid Build Coastguard Worker struct opj_tcd; 563*3ac0a46fSAndroid Build Coastguard Worker /** 564*3ac0a46fSAndroid Build Coastguard Worker JPEG-2000 codestream reader/writer 565*3ac0a46fSAndroid Build Coastguard Worker */ 566*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_j2k { 567*3ac0a46fSAndroid Build Coastguard Worker /* J2K codestream is decoded*/ 568*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL m_is_decoder; 569*3ac0a46fSAndroid Build Coastguard Worker 570*3ac0a46fSAndroid Build Coastguard Worker /* FIXME DOC*/ 571*3ac0a46fSAndroid Build Coastguard Worker union { 572*3ac0a46fSAndroid Build Coastguard Worker opj_j2k_dec_t m_decoder; 573*3ac0a46fSAndroid Build Coastguard Worker opj_j2k_enc_t m_encoder; 574*3ac0a46fSAndroid Build Coastguard Worker } 575*3ac0a46fSAndroid Build Coastguard Worker m_specific_param; 576*3ac0a46fSAndroid Build Coastguard Worker 577*3ac0a46fSAndroid Build Coastguard Worker /** pointer to the internal/private encoded / decoded image */ 578*3ac0a46fSAndroid Build Coastguard Worker opj_image_t* m_private_image; 579*3ac0a46fSAndroid Build Coastguard Worker 580*3ac0a46fSAndroid Build Coastguard Worker /* pointer to the output image (decoded)*/ 581*3ac0a46fSAndroid Build Coastguard Worker opj_image_t* m_output_image; 582*3ac0a46fSAndroid Build Coastguard Worker 583*3ac0a46fSAndroid Build Coastguard Worker /** Coding parameters */ 584*3ac0a46fSAndroid Build Coastguard Worker opj_cp_t m_cp; 585*3ac0a46fSAndroid Build Coastguard Worker 586*3ac0a46fSAndroid Build Coastguard Worker /** the list of procedures to exec **/ 587*3ac0a46fSAndroid Build Coastguard Worker opj_procedure_list_t * m_procedure_list; 588*3ac0a46fSAndroid Build Coastguard Worker 589*3ac0a46fSAndroid Build Coastguard Worker /** the list of validation procedures to follow to make sure the code is valid **/ 590*3ac0a46fSAndroid Build Coastguard Worker opj_procedure_list_t * m_validation_list; 591*3ac0a46fSAndroid Build Coastguard Worker 592*3ac0a46fSAndroid Build Coastguard Worker /** helper used to write the index file */ 593*3ac0a46fSAndroid Build Coastguard Worker opj_codestream_index_t *cstr_index; 594*3ac0a46fSAndroid Build Coastguard Worker 595*3ac0a46fSAndroid Build Coastguard Worker /** number of the tile currently concern by coding/decoding */ 596*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_current_tile_number; 597*3ac0a46fSAndroid Build Coastguard Worker 598*3ac0a46fSAndroid Build Coastguard Worker /** the current tile coder/decoder **/ 599*3ac0a46fSAndroid Build Coastguard Worker struct opj_tcd * m_tcd; 600*3ac0a46fSAndroid Build Coastguard Worker 601*3ac0a46fSAndroid Build Coastguard Worker /** Thread pool */ 602*3ac0a46fSAndroid Build Coastguard Worker opj_thread_pool_t* m_tp; 603*3ac0a46fSAndroid Build Coastguard Worker 604*3ac0a46fSAndroid Build Coastguard Worker /** Image width coming from JP2 IHDR box. 0 from a pure codestream */ 605*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ihdr_w; 606*3ac0a46fSAndroid Build Coastguard Worker 607*3ac0a46fSAndroid Build Coastguard Worker /** Image height coming from JP2 IHDR box. 0 from a pure codestream */ 608*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 ihdr_h; 609*3ac0a46fSAndroid Build Coastguard Worker 610*3ac0a46fSAndroid Build Coastguard Worker /** Set to 1 by the decoder initialization if OPJ_DPARAMETERS_DUMP_FLAG is set */ 611*3ac0a46fSAndroid Build Coastguard Worker unsigned int dump_state; 612*3ac0a46fSAndroid Build Coastguard Worker } 613*3ac0a46fSAndroid Build Coastguard Worker opj_j2k_t; 614*3ac0a46fSAndroid Build Coastguard Worker 615*3ac0a46fSAndroid Build Coastguard Worker 616*3ac0a46fSAndroid Build Coastguard Worker 617*3ac0a46fSAndroid Build Coastguard Worker 618*3ac0a46fSAndroid Build Coastguard Worker /** @name Exported functions */ 619*3ac0a46fSAndroid Build Coastguard Worker /*@{*/ 620*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 621*3ac0a46fSAndroid Build Coastguard Worker 622*3ac0a46fSAndroid Build Coastguard Worker /** 623*3ac0a46fSAndroid Build Coastguard Worker Setup the decoder decoding parameters using user parameters. 624*3ac0a46fSAndroid Build Coastguard Worker Decoding parameters are returned in p_j2k->cp. 625*3ac0a46fSAndroid Build Coastguard Worker @param p_j2k J2K decompressor handle 626*3ac0a46fSAndroid Build Coastguard Worker @param parameters decompression parameters 627*3ac0a46fSAndroid Build Coastguard Worker */ 628*3ac0a46fSAndroid Build Coastguard Worker void opj_j2k_setup_decoder(void *p_j2k, opj_dparameters_t *parameters); 629*3ac0a46fSAndroid Build Coastguard Worker 630*3ac0a46fSAndroid Build Coastguard Worker void opj_j2k_decoder_set_strict_mode(void *j2k, OPJ_BOOL strict); 631*3ac0a46fSAndroid Build Coastguard Worker 632*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_set_threads(void *j2k, OPJ_UINT32 num_threads); 633*3ac0a46fSAndroid Build Coastguard Worker 634*3ac0a46fSAndroid Build Coastguard Worker /** 635*3ac0a46fSAndroid Build Coastguard Worker * Creates a J2K compression structure 636*3ac0a46fSAndroid Build Coastguard Worker * 637*3ac0a46fSAndroid Build Coastguard Worker * @return Returns a handle to a J2K compressor if successful, returns NULL otherwise 638*3ac0a46fSAndroid Build Coastguard Worker */ 639*3ac0a46fSAndroid Build Coastguard Worker opj_j2k_t* opj_j2k_create_compress(void); 640*3ac0a46fSAndroid Build Coastguard Worker 641*3ac0a46fSAndroid Build Coastguard Worker 642*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_setup_encoder(void *p_j2k, 643*3ac0a46fSAndroid Build Coastguard Worker opj_cparameters_t *parameters, 644*3ac0a46fSAndroid Build Coastguard Worker opj_image_t *image, 645*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 646*3ac0a46fSAndroid Build Coastguard Worker 647*3ac0a46fSAndroid Build Coastguard Worker /** 648*3ac0a46fSAndroid Build Coastguard Worker Converts an enum type progression order to string type 649*3ac0a46fSAndroid Build Coastguard Worker */ 650*3ac0a46fSAndroid Build Coastguard Worker const char *opj_j2k_convert_progression_order(OPJ_PROG_ORDER prg_order); 651*3ac0a46fSAndroid Build Coastguard Worker 652*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 653*3ac0a46fSAndroid Build Coastguard Worker /*@}*/ 654*3ac0a46fSAndroid Build Coastguard Worker 655*3ac0a46fSAndroid Build Coastguard Worker /*@}*/ 656*3ac0a46fSAndroid Build Coastguard Worker 657*3ac0a46fSAndroid Build Coastguard Worker /** 658*3ac0a46fSAndroid Build Coastguard Worker * Ends the decompression procedures and possibiliy add data to be read after the 659*3ac0a46fSAndroid Build Coastguard Worker * codestream. 660*3ac0a46fSAndroid Build Coastguard Worker */ 661*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_end_decompress(void *j2k, 662*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 663*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 664*3ac0a46fSAndroid Build Coastguard Worker 665*3ac0a46fSAndroid Build Coastguard Worker /** 666*3ac0a46fSAndroid Build Coastguard Worker * Reads a jpeg2000 codestream header structure. 667*3ac0a46fSAndroid Build Coastguard Worker * 668*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream the stream to read data from. 669*3ac0a46fSAndroid Build Coastguard Worker * @param j2k the jpeg2000 codec. 670*3ac0a46fSAndroid Build Coastguard Worker * @param p_image FIXME DOC 671*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager. 672*3ac0a46fSAndroid Build Coastguard Worker * 673*3ac0a46fSAndroid Build Coastguard Worker * @return true if the box is valid. 674*3ac0a46fSAndroid Build Coastguard Worker */ 675*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_read_header(opj_stream_private_t *p_stream, 676*3ac0a46fSAndroid Build Coastguard Worker void* j2k, 677*3ac0a46fSAndroid Build Coastguard Worker opj_image_t** p_image, 678*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t* p_manager); 679*3ac0a46fSAndroid Build Coastguard Worker 680*3ac0a46fSAndroid Build Coastguard Worker 681*3ac0a46fSAndroid Build Coastguard Worker /** 682*3ac0a46fSAndroid Build Coastguard Worker * Destroys a jpeg2000 codec. 683*3ac0a46fSAndroid Build Coastguard Worker * 684*3ac0a46fSAndroid Build Coastguard Worker * @param j2k the jpeg20000 structure to destroy. 685*3ac0a46fSAndroid Build Coastguard Worker */ 686*3ac0a46fSAndroid Build Coastguard Worker void opj_j2k_destroy(void *j2k); 687*3ac0a46fSAndroid Build Coastguard Worker 688*3ac0a46fSAndroid Build Coastguard Worker /** 689*3ac0a46fSAndroid Build Coastguard Worker * Destroys a codestream index structure. 690*3ac0a46fSAndroid Build Coastguard Worker * 691*3ac0a46fSAndroid Build Coastguard Worker * @param p_cstr_ind the codestream index parameter to destroy. 692*3ac0a46fSAndroid Build Coastguard Worker */ 693*3ac0a46fSAndroid Build Coastguard Worker void j2k_destroy_cstr_index(opj_codestream_index_t *p_cstr_ind); 694*3ac0a46fSAndroid Build Coastguard Worker 695*3ac0a46fSAndroid Build Coastguard Worker /** 696*3ac0a46fSAndroid Build Coastguard Worker * Decode tile data. 697*3ac0a46fSAndroid Build Coastguard Worker * @param j2k the jpeg2000 codec. 698*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_index 699*3ac0a46fSAndroid Build Coastguard Worker * @param p_data FIXME DOC 700*3ac0a46fSAndroid Build Coastguard Worker * @param p_data_size FIXME DOC 701*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream the stream to write data to. 702*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager. 703*3ac0a46fSAndroid Build Coastguard Worker */ 704*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_decode_tile(void * j2k, 705*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_tile_index, 706*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * p_data, 707*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_data_size, 708*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 709*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 710*3ac0a46fSAndroid Build Coastguard Worker 711*3ac0a46fSAndroid Build Coastguard Worker /** 712*3ac0a46fSAndroid Build Coastguard Worker * Reads a tile header. 713*3ac0a46fSAndroid Build Coastguard Worker * @param j2k the jpeg2000 codec. 714*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_index FIXME DOC 715*3ac0a46fSAndroid Build Coastguard Worker * @param p_data_size FIXME DOC 716*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_x0 FIXME DOC 717*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_y0 FIXME DOC 718*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_x1 FIXME DOC 719*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_y1 FIXME DOC 720*3ac0a46fSAndroid Build Coastguard Worker * @param p_nb_comps FIXME DOC 721*3ac0a46fSAndroid Build Coastguard Worker * @param p_go_on FIXME DOC 722*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream the stream to write data to. 723*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager. 724*3ac0a46fSAndroid Build Coastguard Worker */ 725*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_read_tile_header(void * j2k, 726*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 * p_tile_index, 727*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 * p_data_size, 728*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 * p_tile_x0, 729*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 * p_tile_y0, 730*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 * p_tile_x1, 731*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 * p_tile_y1, 732*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 * p_nb_comps, 733*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL * p_go_on, 734*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 735*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 736*3ac0a46fSAndroid Build Coastguard Worker 737*3ac0a46fSAndroid Build Coastguard Worker 738*3ac0a46fSAndroid Build Coastguard Worker /** Sets the indices of the components to decode. 739*3ac0a46fSAndroid Build Coastguard Worker * 740*3ac0a46fSAndroid Build Coastguard Worker * @param j2k the jpeg2000 codec. 741*3ac0a46fSAndroid Build Coastguard Worker * @param numcomps Number of components to decode. 742*3ac0a46fSAndroid Build Coastguard Worker * @param comps_indices Array of num_compts indices (numbering starting at 0) 743*3ac0a46fSAndroid Build Coastguard Worker * corresponding to the components to decode. 744*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager Event manager 745*3ac0a46fSAndroid Build Coastguard Worker * 746*3ac0a46fSAndroid Build Coastguard Worker * @return OPJ_TRUE in case of success. 747*3ac0a46fSAndroid Build Coastguard Worker */ 748*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_set_decoded_components(void *j2k, 749*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numcomps, 750*3ac0a46fSAndroid Build Coastguard Worker const OPJ_UINT32* comps_indices, 751*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 752*3ac0a46fSAndroid Build Coastguard Worker 753*3ac0a46fSAndroid Build Coastguard Worker /** 754*3ac0a46fSAndroid Build Coastguard Worker * Sets the given area to be decoded. This function should be called right after opj_read_header and before any tile header reading. 755*3ac0a46fSAndroid Build Coastguard Worker * 756*3ac0a46fSAndroid Build Coastguard Worker * @param j2k the jpeg2000 codec. 757*3ac0a46fSAndroid Build Coastguard Worker * @param p_image FIXME DOC 758*3ac0a46fSAndroid Build Coastguard Worker * @param p_start_x the left position of the rectangle to decode (in image coordinates). 759*3ac0a46fSAndroid Build Coastguard Worker * @param p_start_y the up position of the rectangle to decode (in image coordinates). 760*3ac0a46fSAndroid Build Coastguard Worker * @param p_end_x the right position of the rectangle to decode (in image coordinates). 761*3ac0a46fSAndroid Build Coastguard Worker * @param p_end_y the bottom position of the rectangle to decode (in image coordinates). 762*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager 763*3ac0a46fSAndroid Build Coastguard Worker * 764*3ac0a46fSAndroid Build Coastguard Worker * @return true if the area could be set. 765*3ac0a46fSAndroid Build Coastguard Worker */ 766*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_set_decode_area(void *j2k, 767*3ac0a46fSAndroid Build Coastguard Worker opj_image_t* p_image, 768*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 p_start_x, OPJ_INT32 p_start_y, 769*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 p_end_x, OPJ_INT32 p_end_y, 770*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 771*3ac0a46fSAndroid Build Coastguard Worker 772*3ac0a46fSAndroid Build Coastguard Worker /** 773*3ac0a46fSAndroid Build Coastguard Worker * Creates a J2K decompression structure. 774*3ac0a46fSAndroid Build Coastguard Worker * 775*3ac0a46fSAndroid Build Coastguard Worker * @return a handle to a J2K decompressor if successful, NULL otherwise. 776*3ac0a46fSAndroid Build Coastguard Worker */ 777*3ac0a46fSAndroid Build Coastguard Worker opj_j2k_t* opj_j2k_create_decompress(void); 778*3ac0a46fSAndroid Build Coastguard Worker 779*3ac0a46fSAndroid Build Coastguard Worker 780*3ac0a46fSAndroid Build Coastguard Worker /** 781*3ac0a46fSAndroid Build Coastguard Worker * Dump some elements from the J2K decompression structure . 782*3ac0a46fSAndroid Build Coastguard Worker * 783*3ac0a46fSAndroid Build Coastguard Worker *@param j2k the jpeg2000 codec. 784*3ac0a46fSAndroid Build Coastguard Worker *@param flag flag to describe what elements are dump. 785*3ac0a46fSAndroid Build Coastguard Worker *@param out_stream output stream where dump the elements. 786*3ac0a46fSAndroid Build Coastguard Worker * 787*3ac0a46fSAndroid Build Coastguard Worker */ 788*3ac0a46fSAndroid Build Coastguard Worker void j2k_dump(void* j2k, OPJ_INT32 flag, FILE* out_stream); 789*3ac0a46fSAndroid Build Coastguard Worker 790*3ac0a46fSAndroid Build Coastguard Worker 791*3ac0a46fSAndroid Build Coastguard Worker 792*3ac0a46fSAndroid Build Coastguard Worker /** 793*3ac0a46fSAndroid Build Coastguard Worker * Dump an image header structure. 794*3ac0a46fSAndroid Build Coastguard Worker * 795*3ac0a46fSAndroid Build Coastguard Worker *@param image the image header to dump. 796*3ac0a46fSAndroid Build Coastguard Worker *@param dev_dump_flag flag to describe if we are in the case of this function is use outside j2k_dump function 797*3ac0a46fSAndroid Build Coastguard Worker *@param out_stream output stream where dump the elements. 798*3ac0a46fSAndroid Build Coastguard Worker */ 799*3ac0a46fSAndroid Build Coastguard Worker void j2k_dump_image_header(opj_image_t* image, OPJ_BOOL dev_dump_flag, 800*3ac0a46fSAndroid Build Coastguard Worker FILE* out_stream); 801*3ac0a46fSAndroid Build Coastguard Worker 802*3ac0a46fSAndroid Build Coastguard Worker /** 803*3ac0a46fSAndroid Build Coastguard Worker * Dump a component image header structure. 804*3ac0a46fSAndroid Build Coastguard Worker * 805*3ac0a46fSAndroid Build Coastguard Worker *@param comp the component image header to dump. 806*3ac0a46fSAndroid Build Coastguard Worker *@param dev_dump_flag flag to describe if we are in the case of this function is use outside j2k_dump function 807*3ac0a46fSAndroid Build Coastguard Worker *@param out_stream output stream where dump the elements. 808*3ac0a46fSAndroid Build Coastguard Worker */ 809*3ac0a46fSAndroid Build Coastguard Worker void j2k_dump_image_comp_header(opj_image_comp_t* comp, OPJ_BOOL dev_dump_flag, 810*3ac0a46fSAndroid Build Coastguard Worker FILE* out_stream); 811*3ac0a46fSAndroid Build Coastguard Worker 812*3ac0a46fSAndroid Build Coastguard Worker /** 813*3ac0a46fSAndroid Build Coastguard Worker * Get the codestream info from a JPEG2000 codec. 814*3ac0a46fSAndroid Build Coastguard Worker * 815*3ac0a46fSAndroid Build Coastguard Worker *@param j2k the component image header to dump. 816*3ac0a46fSAndroid Build Coastguard Worker * 817*3ac0a46fSAndroid Build Coastguard Worker *@return the codestream information extract from the jpg2000 codec 818*3ac0a46fSAndroid Build Coastguard Worker */ 819*3ac0a46fSAndroid Build Coastguard Worker opj_codestream_info_v2_t* j2k_get_cstr_info(void* j2k); 820*3ac0a46fSAndroid Build Coastguard Worker 821*3ac0a46fSAndroid Build Coastguard Worker /** 822*3ac0a46fSAndroid Build Coastguard Worker * Get the codestream index from a JPEG2000 codec. 823*3ac0a46fSAndroid Build Coastguard Worker * 824*3ac0a46fSAndroid Build Coastguard Worker *@param j2k the component image header to dump. 825*3ac0a46fSAndroid Build Coastguard Worker * 826*3ac0a46fSAndroid Build Coastguard Worker *@return the codestream index extract from the jpg2000 codec 827*3ac0a46fSAndroid Build Coastguard Worker */ 828*3ac0a46fSAndroid Build Coastguard Worker opj_codestream_index_t* j2k_get_cstr_index(void* j2k); 829*3ac0a46fSAndroid Build Coastguard Worker 830*3ac0a46fSAndroid Build Coastguard Worker /** 831*3ac0a46fSAndroid Build Coastguard Worker * Decode an image from a JPEG-2000 codestream 832*3ac0a46fSAndroid Build Coastguard Worker * @param j2k J2K decompressor handle 833*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream FIXME DOC 834*3ac0a46fSAndroid Build Coastguard Worker * @param p_image FIXME DOC 835*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager FIXME DOC 836*3ac0a46fSAndroid Build Coastguard Worker * @return FIXME DOC 837*3ac0a46fSAndroid Build Coastguard Worker */ 838*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_decode(void *j2k, 839*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 840*3ac0a46fSAndroid Build Coastguard Worker opj_image_t *p_image, 841*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t *p_manager); 842*3ac0a46fSAndroid Build Coastguard Worker 843*3ac0a46fSAndroid Build Coastguard Worker 844*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_get_tile(void *j2k, 845*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 846*3ac0a46fSAndroid Build Coastguard Worker opj_image_t* p_image, 847*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager, 848*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tile_index); 849*3ac0a46fSAndroid Build Coastguard Worker 850*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_set_decoded_resolution_factor(void *j2k, 851*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 res_factor, 852*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 853*3ac0a46fSAndroid Build Coastguard Worker 854*3ac0a46fSAndroid Build Coastguard Worker /** 855*3ac0a46fSAndroid Build Coastguard Worker * Specify extra options for the encoder. 856*3ac0a46fSAndroid Build Coastguard Worker * 857*3ac0a46fSAndroid Build Coastguard Worker * @param j2k the jpeg2000 codec. 858*3ac0a46fSAndroid Build Coastguard Worker * @param p_options options 859*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager 860*3ac0a46fSAndroid Build Coastguard Worker * 861*3ac0a46fSAndroid Build Coastguard Worker * @see opj_encoder_set_extra_options() for more details. 862*3ac0a46fSAndroid Build Coastguard Worker */ 863*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_encoder_set_extra_options( 864*3ac0a46fSAndroid Build Coastguard Worker void *j2k, 865*3ac0a46fSAndroid Build Coastguard Worker const char* const* p_options, 866*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 867*3ac0a46fSAndroid Build Coastguard Worker 868*3ac0a46fSAndroid Build Coastguard Worker /** 869*3ac0a46fSAndroid Build Coastguard Worker * Writes a tile. 870*3ac0a46fSAndroid Build Coastguard Worker * @param j2k the jpeg2000 codec. 871*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_index FIXME DOC 872*3ac0a46fSAndroid Build Coastguard Worker * @param p_data FIXME DOC 873*3ac0a46fSAndroid Build Coastguard Worker * @param p_data_size FIXME DOC 874*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream the stream to write data to. 875*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager. 876*3ac0a46fSAndroid Build Coastguard Worker */ 877*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_write_tile(void * j2k, 878*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_tile_index, 879*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * p_data, 880*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_data_size, 881*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 882*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 883*3ac0a46fSAndroid Build Coastguard Worker 884*3ac0a46fSAndroid Build Coastguard Worker /** 885*3ac0a46fSAndroid Build Coastguard Worker * Encodes an image into a JPEG-2000 codestream 886*3ac0a46fSAndroid Build Coastguard Worker */ 887*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_encode(void * j2k, 888*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *cio, 889*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 890*3ac0a46fSAndroid Build Coastguard Worker 891*3ac0a46fSAndroid Build Coastguard Worker /** 892*3ac0a46fSAndroid Build Coastguard Worker * Starts a compression scheme, i.e. validates the codec parameters, writes the header. 893*3ac0a46fSAndroid Build Coastguard Worker * 894*3ac0a46fSAndroid Build Coastguard Worker * @param j2k the jpeg2000 codec. 895*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream the stream object. 896*3ac0a46fSAndroid Build Coastguard Worker * @param p_image FIXME DOC 897*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager. 898*3ac0a46fSAndroid Build Coastguard Worker * 899*3ac0a46fSAndroid Build Coastguard Worker * @return true if the codec is valid. 900*3ac0a46fSAndroid Build Coastguard Worker */ 901*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_start_compress(void *j2k, 902*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 903*3ac0a46fSAndroid Build Coastguard Worker opj_image_t * p_image, 904*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 905*3ac0a46fSAndroid Build Coastguard Worker 906*3ac0a46fSAndroid Build Coastguard Worker /** 907*3ac0a46fSAndroid Build Coastguard Worker * Ends the compression procedures and possibiliy add data to be read after the 908*3ac0a46fSAndroid Build Coastguard Worker * codestream. 909*3ac0a46fSAndroid Build Coastguard Worker */ 910*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_end_compress(void *j2k, 911*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *cio, 912*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 913*3ac0a46fSAndroid Build Coastguard Worker 914*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_j2k_setup_mct_encoding(opj_tcp_t * p_tcp, opj_image_t * p_image); 915*3ac0a46fSAndroid Build Coastguard Worker 916*3ac0a46fSAndroid Build Coastguard Worker 917*3ac0a46fSAndroid Build Coastguard Worker #endif /* OPJ_J2K_H */ 918