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) 2002-2003, Yannick Verschueren 10*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2005, Herve Drolon, FreeImage Team 11*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 12*3ac0a46fSAndroid Build Coastguard Worker * Copyright (c) 2012, CS Systemes d'Information, France 13*3ac0a46fSAndroid Build Coastguard Worker * All rights reserved. 14*3ac0a46fSAndroid Build Coastguard Worker * 15*3ac0a46fSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 16*3ac0a46fSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 17*3ac0a46fSAndroid Build Coastguard Worker * are met: 18*3ac0a46fSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 19*3ac0a46fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 20*3ac0a46fSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 21*3ac0a46fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 22*3ac0a46fSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 23*3ac0a46fSAndroid Build Coastguard Worker * 24*3ac0a46fSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 25*3ac0a46fSAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26*3ac0a46fSAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27*3ac0a46fSAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 28*3ac0a46fSAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29*3ac0a46fSAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30*3ac0a46fSAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 31*3ac0a46fSAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 32*3ac0a46fSAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 33*3ac0a46fSAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34*3ac0a46fSAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE. 35*3ac0a46fSAndroid Build Coastguard Worker */ 36*3ac0a46fSAndroid Build Coastguard Worker #ifndef OPJ_JP2_H 37*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_JP2_H 38*3ac0a46fSAndroid Build Coastguard Worker /** 39*3ac0a46fSAndroid Build Coastguard Worker @file jp2.h 40*3ac0a46fSAndroid Build Coastguard Worker @brief The JPEG-2000 file format Reader/Writer (JP2) 41*3ac0a46fSAndroid Build Coastguard Worker 42*3ac0a46fSAndroid Build Coastguard Worker */ 43*3ac0a46fSAndroid Build Coastguard Worker 44*3ac0a46fSAndroid Build Coastguard Worker /** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */ 45*3ac0a46fSAndroid Build Coastguard Worker /*@{*/ 46*3ac0a46fSAndroid Build Coastguard Worker 47*3ac0a46fSAndroid Build Coastguard Worker /*#define JPIP_JPIP 0x6a706970*/ 48*3ac0a46fSAndroid Build Coastguard Worker 49*3ac0a46fSAndroid Build Coastguard Worker #define JP2_JP 0x6a502020 /**< JPEG 2000 signature box */ 50*3ac0a46fSAndroid Build Coastguard Worker #define JP2_FTYP 0x66747970 /**< File type box */ 51*3ac0a46fSAndroid Build Coastguard Worker #define JP2_JP2H 0x6a703268 /**< JP2 header box (super-box) */ 52*3ac0a46fSAndroid Build Coastguard Worker #define JP2_IHDR 0x69686472 /**< Image header box */ 53*3ac0a46fSAndroid Build Coastguard Worker #define JP2_COLR 0x636f6c72 /**< Colour specification box */ 54*3ac0a46fSAndroid Build Coastguard Worker #define JP2_JP2C 0x6a703263 /**< Contiguous codestream box */ 55*3ac0a46fSAndroid Build Coastguard Worker #define JP2_URL 0x75726c20 /**< Data entry URL box */ 56*3ac0a46fSAndroid Build Coastguard Worker #define JP2_PCLR 0x70636c72 /**< Palette box */ 57*3ac0a46fSAndroid Build Coastguard Worker #define JP2_CMAP 0x636d6170 /**< Component Mapping box */ 58*3ac0a46fSAndroid Build Coastguard Worker #define JP2_CDEF 0x63646566 /**< Channel Definition box */ 59*3ac0a46fSAndroid Build Coastguard Worker #define JP2_DTBL 0x6474626c /**< Data Reference box */ 60*3ac0a46fSAndroid Build Coastguard Worker #define JP2_BPCC 0x62706363 /**< Bits per component box */ 61*3ac0a46fSAndroid Build Coastguard Worker #define JP2_JP2 0x6a703220 /**< File type fields */ 62*3ac0a46fSAndroid Build Coastguard Worker 63*3ac0a46fSAndroid Build Coastguard Worker /* For the future */ 64*3ac0a46fSAndroid Build Coastguard Worker /* #define JP2_RES 0x72657320 */ /**< Resolution box (super-box) */ 65*3ac0a46fSAndroid Build Coastguard Worker /* #define JP2_JP2I 0x6a703269 */ /**< Intellectual property box */ 66*3ac0a46fSAndroid Build Coastguard Worker /* #define JP2_XML 0x786d6c20 */ /**< XML box */ 67*3ac0a46fSAndroid Build Coastguard Worker /* #define JP2_UUID 0x75756994 */ /**< UUID box */ 68*3ac0a46fSAndroid Build Coastguard Worker /* #define JP2_UINF 0x75696e66 */ /**< UUID info box (super-box) */ 69*3ac0a46fSAndroid Build Coastguard Worker /* #define JP2_ULST 0x756c7374 */ /**< UUID list box */ 70*3ac0a46fSAndroid Build Coastguard Worker 71*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 72*3ac0a46fSAndroid Build Coastguard Worker 73*3ac0a46fSAndroid Build Coastguard Worker typedef enum { 74*3ac0a46fSAndroid Build Coastguard Worker JP2_STATE_NONE = 0x0, 75*3ac0a46fSAndroid Build Coastguard Worker JP2_STATE_SIGNATURE = 0x1, 76*3ac0a46fSAndroid Build Coastguard Worker JP2_STATE_FILE_TYPE = 0x2, 77*3ac0a46fSAndroid Build Coastguard Worker JP2_STATE_HEADER = 0x4, 78*3ac0a46fSAndroid Build Coastguard Worker JP2_STATE_CODESTREAM = 0x8, 79*3ac0a46fSAndroid Build Coastguard Worker JP2_STATE_END_CODESTREAM = 0x10, 80*3ac0a46fSAndroid Build Coastguard Worker JP2_STATE_UNKNOWN = 0x7fffffff /* ISO C restricts enumerator values to range of 'int' */ 81*3ac0a46fSAndroid Build Coastguard Worker } 82*3ac0a46fSAndroid Build Coastguard Worker JP2_STATE; 83*3ac0a46fSAndroid Build Coastguard Worker 84*3ac0a46fSAndroid Build Coastguard Worker typedef enum { 85*3ac0a46fSAndroid Build Coastguard Worker JP2_IMG_STATE_NONE = 0x0, 86*3ac0a46fSAndroid Build Coastguard Worker JP2_IMG_STATE_UNKNOWN = 0x7fffffff 87*3ac0a46fSAndroid Build Coastguard Worker } 88*3ac0a46fSAndroid Build Coastguard Worker JP2_IMG_STATE; 89*3ac0a46fSAndroid Build Coastguard Worker 90*3ac0a46fSAndroid Build Coastguard Worker /** 91*3ac0a46fSAndroid Build Coastguard Worker Channel description: channel index, type, association 92*3ac0a46fSAndroid Build Coastguard Worker */ 93*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2_cdef_info { 94*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT16 cn, typ, asoc; 95*3ac0a46fSAndroid Build Coastguard Worker } opj_jp2_cdef_info_t; 96*3ac0a46fSAndroid Build Coastguard Worker 97*3ac0a46fSAndroid Build Coastguard Worker /** 98*3ac0a46fSAndroid Build Coastguard Worker Channel descriptions and number of descriptions 99*3ac0a46fSAndroid Build Coastguard Worker */ 100*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2_cdef { 101*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_cdef_info_t *info; 102*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT16 n; 103*3ac0a46fSAndroid Build Coastguard Worker } opj_jp2_cdef_t; 104*3ac0a46fSAndroid Build Coastguard Worker 105*3ac0a46fSAndroid Build Coastguard Worker /** 106*3ac0a46fSAndroid Build Coastguard Worker Component mappings: channel index, mapping type, palette index 107*3ac0a46fSAndroid Build Coastguard Worker */ 108*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2_cmap_comp { 109*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT16 cmp; 110*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE mtyp, pcol; 111*3ac0a46fSAndroid Build Coastguard Worker } opj_jp2_cmap_comp_t; 112*3ac0a46fSAndroid Build Coastguard Worker 113*3ac0a46fSAndroid Build Coastguard Worker /** 114*3ac0a46fSAndroid Build Coastguard Worker Palette data: table entries, palette columns 115*3ac0a46fSAndroid Build Coastguard Worker */ 116*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2_pclr { 117*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 *entries; 118*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *channel_sign; 119*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *channel_size; 120*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_cmap_comp_t *cmap; 121*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT16 nr_entries; 122*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE nr_channels; 123*3ac0a46fSAndroid Build Coastguard Worker } opj_jp2_pclr_t; 124*3ac0a46fSAndroid Build Coastguard Worker 125*3ac0a46fSAndroid Build Coastguard Worker /** 126*3ac0a46fSAndroid Build Coastguard Worker Collector for ICC profile, palette, component mapping, channel description 127*3ac0a46fSAndroid Build Coastguard Worker */ 128*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2_color { 129*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *icc_profile_buf; 130*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 icc_profile_len; 131*3ac0a46fSAndroid Build Coastguard Worker 132*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_cdef_t *jp2_cdef; 133*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_pclr_t *jp2_pclr; 134*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE jp2_has_colr; 135*3ac0a46fSAndroid Build Coastguard Worker } opj_jp2_color_t; 136*3ac0a46fSAndroid Build Coastguard Worker 137*3ac0a46fSAndroid Build Coastguard Worker /** 138*3ac0a46fSAndroid Build Coastguard Worker JP2 component 139*3ac0a46fSAndroid Build Coastguard Worker */ 140*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2_comps { 141*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 depth; 142*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 sgnd; 143*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 bpcc; 144*3ac0a46fSAndroid Build Coastguard Worker } opj_jp2_comps_t; 145*3ac0a46fSAndroid Build Coastguard Worker 146*3ac0a46fSAndroid Build Coastguard Worker /** 147*3ac0a46fSAndroid Build Coastguard Worker JPEG-2000 file format reader/writer 148*3ac0a46fSAndroid Build Coastguard Worker */ 149*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2 { 150*3ac0a46fSAndroid Build Coastguard Worker /** handle to the J2K codec */ 151*3ac0a46fSAndroid Build Coastguard Worker opj_j2k_t *j2k; 152*3ac0a46fSAndroid Build Coastguard Worker /** list of validation procedures */ 153*3ac0a46fSAndroid Build Coastguard Worker struct opj_procedure_list * m_validation_list; 154*3ac0a46fSAndroid Build Coastguard Worker /** list of execution procedures */ 155*3ac0a46fSAndroid Build Coastguard Worker struct opj_procedure_list * m_procedure_list; 156*3ac0a46fSAndroid Build Coastguard Worker 157*3ac0a46fSAndroid Build Coastguard Worker /* width of image */ 158*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 w; 159*3ac0a46fSAndroid Build Coastguard Worker /* height of image */ 160*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 h; 161*3ac0a46fSAndroid Build Coastguard Worker /* number of components in the image */ 162*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numcomps; 163*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 bpc; 164*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 C; 165*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 UnkC; 166*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 IPR; 167*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 meth; 168*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 approx; 169*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 enumcs; 170*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 precedence; 171*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 brand; 172*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 minversion; 173*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numcl; 174*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 *cl; 175*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_comps_t *comps; 176*3ac0a46fSAndroid Build Coastguard Worker /* FIXME: The following two variables are used to save offset 177*3ac0a46fSAndroid Build Coastguard Worker as we write out a JP2 file to disk. This mechanism is not flexible 178*3ac0a46fSAndroid Build Coastguard Worker as codec writers will need to extand those fields as new part 179*3ac0a46fSAndroid Build Coastguard Worker of the standard are implemented. 180*3ac0a46fSAndroid Build Coastguard Worker */ 181*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T j2k_codestream_offset; 182*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T jpip_iptr_offset; 183*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL jpip_on; 184*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 jp2_state; 185*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 jp2_img_state; 186*3ac0a46fSAndroid Build Coastguard Worker 187*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_color_t color; 188*3ac0a46fSAndroid Build Coastguard Worker 189*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL ignore_pclr_cmap_cdef; 190*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE has_jp2h; 191*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE has_ihdr; 192*3ac0a46fSAndroid Build Coastguard Worker } 193*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_t; 194*3ac0a46fSAndroid Build Coastguard Worker 195*3ac0a46fSAndroid Build Coastguard Worker /** 196*3ac0a46fSAndroid Build Coastguard Worker JP2 Box 197*3ac0a46fSAndroid Build Coastguard Worker */ 198*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2_box { 199*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 length; 200*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 type; 201*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 init_pos; 202*3ac0a46fSAndroid Build Coastguard Worker } opj_jp2_box_t; 203*3ac0a46fSAndroid Build Coastguard Worker 204*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2_header_handler { 205*3ac0a46fSAndroid Build Coastguard Worker /* marker value */ 206*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 id; 207*3ac0a46fSAndroid Build Coastguard Worker /* action linked to the marker */ 208*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL(*handler)(opj_jp2_t *jp2, 209*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE *p_header_data, 210*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_header_size, 211*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 212*3ac0a46fSAndroid Build Coastguard Worker } 213*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_header_handler_t; 214*3ac0a46fSAndroid Build Coastguard Worker 215*3ac0a46fSAndroid Build Coastguard Worker 216*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_jp2_img_header_writer_handler { 217*3ac0a46fSAndroid Build Coastguard Worker /* action to perform */ 218*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE* (*handler)(opj_jp2_t *jp2, OPJ_UINT32 * p_data_size); 219*3ac0a46fSAndroid Build Coastguard Worker /* result of the action : data */ 220*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE* m_data; 221*3ac0a46fSAndroid Build Coastguard Worker /* size of data */ 222*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 m_size; 223*3ac0a46fSAndroid Build Coastguard Worker } 224*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_img_header_writer_handler_t; 225*3ac0a46fSAndroid Build Coastguard Worker 226*3ac0a46fSAndroid Build Coastguard Worker /** @name Exported functions */ 227*3ac0a46fSAndroid Build Coastguard Worker /*@{*/ 228*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 229*3ac0a46fSAndroid Build Coastguard Worker 230*3ac0a46fSAndroid Build Coastguard Worker /** 231*3ac0a46fSAndroid Build Coastguard Worker Setup the decoder decoding parameters using user parameters. 232*3ac0a46fSAndroid Build Coastguard Worker Decoding parameters are returned in jp2->j2k->cp. 233*3ac0a46fSAndroid Build Coastguard Worker @param p_jp2 JP2 decompressor handle 234*3ac0a46fSAndroid Build Coastguard Worker @param parameters decompression parameters 235*3ac0a46fSAndroid Build Coastguard Worker */ 236*3ac0a46fSAndroid Build Coastguard Worker void opj_jp2_setup_decoder(void *p_jp2, opj_dparameters_t *parameters); 237*3ac0a46fSAndroid Build Coastguard Worker 238*3ac0a46fSAndroid Build Coastguard Worker /** 239*3ac0a46fSAndroid Build Coastguard Worker Set the strict mode parameter. When strict mode is enabled, the entire 240*3ac0a46fSAndroid Build Coastguard Worker bitstream must be decoded or an error is returned. When it is disabled, 241*3ac0a46fSAndroid Build Coastguard Worker the decoder will decode partial bitstreams. 242*3ac0a46fSAndroid Build Coastguard Worker @param p_jp2 JP2 decompressor handle 243*3ac0a46fSAndroid Build Coastguard Worker @param strict OPJ_TRUE for strict mode 244*3ac0a46fSAndroid Build Coastguard Worker */ 245*3ac0a46fSAndroid Build Coastguard Worker void opj_jp2_decoder_set_strict_mode(void *p_jp2, OPJ_BOOL strict); 246*3ac0a46fSAndroid Build Coastguard Worker 247*3ac0a46fSAndroid Build Coastguard Worker /** Allocates worker threads for the compressor/decompressor. 248*3ac0a46fSAndroid Build Coastguard Worker * 249*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 JP2 decompressor handle 250*3ac0a46fSAndroid Build Coastguard Worker * @param num_threads Number of threads. 251*3ac0a46fSAndroid Build Coastguard Worker * @return OPJ_TRUE in case of success. 252*3ac0a46fSAndroid Build Coastguard Worker */ 253*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_set_threads(void *p_jp2, OPJ_UINT32 num_threads); 254*3ac0a46fSAndroid Build Coastguard Worker 255*3ac0a46fSAndroid Build Coastguard Worker /** 256*3ac0a46fSAndroid Build Coastguard Worker * Decode an image from a JPEG-2000 file stream 257*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 JP2 decompressor handle 258*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream FIXME DOC 259*3ac0a46fSAndroid Build Coastguard Worker * @param p_image FIXME DOC 260*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager FIXME DOC 261*3ac0a46fSAndroid Build Coastguard Worker * 262*3ac0a46fSAndroid Build Coastguard Worker * @return Returns a decoded image if successful, returns NULL otherwise 263*3ac0a46fSAndroid Build Coastguard Worker */ 264*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_decode(void *p_jp2, 265*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 266*3ac0a46fSAndroid Build Coastguard Worker opj_image_t* p_image, 267*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 268*3ac0a46fSAndroid Build Coastguard Worker 269*3ac0a46fSAndroid Build Coastguard Worker /** 270*3ac0a46fSAndroid Build Coastguard Worker * Setup the encoder parameters using the current image and using user parameters. 271*3ac0a46fSAndroid Build Coastguard Worker * Coding parameters are returned in jp2->j2k->cp. 272*3ac0a46fSAndroid Build Coastguard Worker * 273*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 JP2 compressor handle 274*3ac0a46fSAndroid Build Coastguard Worker * @param parameters compression parameters 275*3ac0a46fSAndroid Build Coastguard Worker * @param image input filled image 276*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager FIXME DOC 277*3ac0a46fSAndroid Build Coastguard Worker * @return OPJ_TRUE if successful, OPJ_FALSE otherwise 278*3ac0a46fSAndroid Build Coastguard Worker */ 279*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_setup_encoder(void *p_jp2, 280*3ac0a46fSAndroid Build Coastguard Worker opj_cparameters_t *parameters, 281*3ac0a46fSAndroid Build Coastguard Worker opj_image_t *image, 282*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 283*3ac0a46fSAndroid Build Coastguard Worker 284*3ac0a46fSAndroid Build Coastguard Worker /** 285*3ac0a46fSAndroid Build Coastguard Worker Encode an image into a JPEG-2000 file stream 286*3ac0a46fSAndroid Build Coastguard Worker @param p_jp2 JP2 compressor handle 287*3ac0a46fSAndroid Build Coastguard Worker @param stream Output buffer stream 288*3ac0a46fSAndroid Build Coastguard Worker @param p_manager event manager 289*3ac0a46fSAndroid Build Coastguard Worker @return Returns true if successful, returns false otherwise 290*3ac0a46fSAndroid Build Coastguard Worker */ 291*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_encode(void *p_jp2, 292*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *stream, 293*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 294*3ac0a46fSAndroid Build Coastguard Worker 295*3ac0a46fSAndroid Build Coastguard Worker 296*3ac0a46fSAndroid Build Coastguard Worker /** 297*3ac0a46fSAndroid Build Coastguard Worker * Starts a compression scheme, i.e. validates the codec parameters, writes the header. 298*3ac0a46fSAndroid Build Coastguard Worker * 299*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 the jpeg2000 file codec. 300*3ac0a46fSAndroid Build Coastguard Worker * @param stream the stream object. 301*3ac0a46fSAndroid Build Coastguard Worker * @param p_image FIXME DOC 302*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager FIXME DOC 303*3ac0a46fSAndroid Build Coastguard Worker * 304*3ac0a46fSAndroid Build Coastguard Worker * @return true if the codec is valid. 305*3ac0a46fSAndroid Build Coastguard Worker */ 306*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_start_compress(void *p_jp2, 307*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *stream, 308*3ac0a46fSAndroid Build Coastguard Worker opj_image_t * p_image, 309*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 310*3ac0a46fSAndroid Build Coastguard Worker 311*3ac0a46fSAndroid Build Coastguard Worker 312*3ac0a46fSAndroid Build Coastguard Worker /** 313*3ac0a46fSAndroid Build Coastguard Worker * Ends the compression procedures and possibiliy add data to be read after the 314*3ac0a46fSAndroid Build Coastguard Worker * codestream. 315*3ac0a46fSAndroid Build Coastguard Worker */ 316*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_end_compress(void *p_jp2, 317*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *cio, 318*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 319*3ac0a46fSAndroid Build Coastguard Worker 320*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */ 321*3ac0a46fSAndroid Build Coastguard Worker 322*3ac0a46fSAndroid Build Coastguard Worker /** 323*3ac0a46fSAndroid Build Coastguard Worker * Ends the decompression procedures and possibiliy add data to be read after the 324*3ac0a46fSAndroid Build Coastguard Worker * codestream. 325*3ac0a46fSAndroid Build Coastguard Worker */ 326*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_end_decompress(void *p_jp2, 327*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *cio, 328*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 329*3ac0a46fSAndroid Build Coastguard Worker 330*3ac0a46fSAndroid Build Coastguard Worker /** 331*3ac0a46fSAndroid Build Coastguard Worker * Reads a jpeg2000 file header structure. 332*3ac0a46fSAndroid Build Coastguard Worker * 333*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream the stream to read data from. 334*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 the jpeg2000 file header structure. 335*3ac0a46fSAndroid Build Coastguard Worker * @param p_image FIXME DOC 336*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager. 337*3ac0a46fSAndroid Build Coastguard Worker * 338*3ac0a46fSAndroid Build Coastguard Worker * @return true if the box is valid. 339*3ac0a46fSAndroid Build Coastguard Worker */ 340*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_read_header(opj_stream_private_t *p_stream, 341*3ac0a46fSAndroid Build Coastguard Worker void *p_jp2, 342*3ac0a46fSAndroid Build Coastguard Worker opj_image_t ** p_image, 343*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 344*3ac0a46fSAndroid Build Coastguard Worker 345*3ac0a46fSAndroid Build Coastguard Worker /** Sets the indices of the components to decode. 346*3ac0a46fSAndroid Build Coastguard Worker * 347*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 JP2 decompressor handle 348*3ac0a46fSAndroid Build Coastguard Worker * @param numcomps Number of components to decode. 349*3ac0a46fSAndroid Build Coastguard Worker * @param comps_indices Array of num_compts indices (numbering starting at 0) 350*3ac0a46fSAndroid Build Coastguard Worker * corresponding to the components to decode. 351*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager Event manager; 352*3ac0a46fSAndroid Build Coastguard Worker * 353*3ac0a46fSAndroid Build Coastguard Worker * @return OPJ_TRUE in case of success. 354*3ac0a46fSAndroid Build Coastguard Worker */ 355*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_set_decoded_components(void *p_jp2, 356*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 numcomps, 357*3ac0a46fSAndroid Build Coastguard Worker const OPJ_UINT32* comps_indices, 358*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 359*3ac0a46fSAndroid Build Coastguard Worker 360*3ac0a46fSAndroid Build Coastguard Worker /** 361*3ac0a46fSAndroid Build Coastguard Worker * Reads a tile header. 362*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 the jpeg2000 codec. 363*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_index FIXME DOC 364*3ac0a46fSAndroid Build Coastguard Worker * @param p_data_size FIXME DOC 365*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_x0 FIXME DOC 366*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_y0 FIXME DOC 367*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_x1 FIXME DOC 368*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_y1 FIXME DOC 369*3ac0a46fSAndroid Build Coastguard Worker * @param p_nb_comps FIXME DOC 370*3ac0a46fSAndroid Build Coastguard Worker * @param p_go_on FIXME DOC 371*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream the stream to write data to. 372*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager. 373*3ac0a46fSAndroid Build Coastguard Worker */ 374*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_read_tile_header(void * p_jp2, 375*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 * p_tile_index, 376*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 * p_data_size, 377*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 * p_tile_x0, 378*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 * p_tile_y0, 379*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 * p_tile_x1, 380*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 * p_tile_y1, 381*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 * p_nb_comps, 382*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL * p_go_on, 383*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 384*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 385*3ac0a46fSAndroid Build Coastguard Worker 386*3ac0a46fSAndroid Build Coastguard Worker /** 387*3ac0a46fSAndroid Build Coastguard Worker * Writes a tile. 388*3ac0a46fSAndroid Build Coastguard Worker * 389*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 the jpeg2000 codec. 390*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_index FIXME DOC 391*3ac0a46fSAndroid Build Coastguard Worker * @param p_data FIXME DOC 392*3ac0a46fSAndroid Build Coastguard Worker * @param p_data_size FIXME DOC 393*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream the stream to write data to. 394*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager. 395*3ac0a46fSAndroid Build Coastguard Worker */ 396*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_write_tile(void *p_jp2, 397*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_tile_index, 398*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * p_data, 399*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_data_size, 400*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 401*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 402*3ac0a46fSAndroid Build Coastguard Worker 403*3ac0a46fSAndroid Build Coastguard Worker /** 404*3ac0a46fSAndroid Build Coastguard Worker * Decode tile data. 405*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 the jpeg2000 codec. 406*3ac0a46fSAndroid Build Coastguard Worker * @param p_tile_index FIXME DOC 407*3ac0a46fSAndroid Build Coastguard Worker * @param p_data FIXME DOC 408*3ac0a46fSAndroid Build Coastguard Worker * @param p_data_size FIXME DOC 409*3ac0a46fSAndroid Build Coastguard Worker * @param p_stream the stream to write data to. 410*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager. 411*3ac0a46fSAndroid Build Coastguard Worker * 412*3ac0a46fSAndroid Build Coastguard Worker * @return FIXME DOC 413*3ac0a46fSAndroid Build Coastguard Worker */ 414*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_decode_tile(void * p_jp2, 415*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_tile_index, 416*3ac0a46fSAndroid Build Coastguard Worker OPJ_BYTE * p_data, 417*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 p_data_size, 418*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 419*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 420*3ac0a46fSAndroid Build Coastguard Worker 421*3ac0a46fSAndroid Build Coastguard Worker /** 422*3ac0a46fSAndroid Build Coastguard Worker * Creates a jpeg2000 file decompressor. 423*3ac0a46fSAndroid Build Coastguard Worker * 424*3ac0a46fSAndroid Build Coastguard Worker * @return an empty jpeg2000 file codec. 425*3ac0a46fSAndroid Build Coastguard Worker */ 426*3ac0a46fSAndroid Build Coastguard Worker opj_jp2_t* opj_jp2_create(OPJ_BOOL p_is_decoder); 427*3ac0a46fSAndroid Build Coastguard Worker 428*3ac0a46fSAndroid Build Coastguard Worker /** 429*3ac0a46fSAndroid Build Coastguard Worker Destroy a JP2 decompressor handle 430*3ac0a46fSAndroid Build Coastguard Worker @param p_jp2 JP2 decompressor handle to destroy 431*3ac0a46fSAndroid Build Coastguard Worker */ 432*3ac0a46fSAndroid Build Coastguard Worker void opj_jp2_destroy(void *p_jp2); 433*3ac0a46fSAndroid Build Coastguard Worker 434*3ac0a46fSAndroid Build Coastguard Worker 435*3ac0a46fSAndroid Build Coastguard Worker /** 436*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. 437*3ac0a46fSAndroid Build Coastguard Worker * 438*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 the jpeg2000 codec. 439*3ac0a46fSAndroid Build Coastguard Worker * @param p_image FIXME DOC 440*3ac0a46fSAndroid Build Coastguard Worker * @param p_start_x the left position of the rectangle to decode (in image coordinates). 441*3ac0a46fSAndroid Build Coastguard Worker * @param p_start_y the up position of the rectangle to decode (in image coordinates). 442*3ac0a46fSAndroid Build Coastguard Worker * @param p_end_x the right position of the rectangle to decode (in image coordinates). 443*3ac0a46fSAndroid Build Coastguard Worker * @param p_end_y the bottom position of the rectangle to decode (in image coordinates). 444*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager 445*3ac0a46fSAndroid Build Coastguard Worker * 446*3ac0a46fSAndroid Build Coastguard Worker * @return true if the area could be set. 447*3ac0a46fSAndroid Build Coastguard Worker */ 448*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_set_decode_area(void *p_jp2, 449*3ac0a46fSAndroid Build Coastguard Worker opj_image_t* p_image, 450*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 p_start_x, OPJ_INT32 p_start_y, 451*3ac0a46fSAndroid Build Coastguard Worker OPJ_INT32 p_end_x, OPJ_INT32 p_end_y, 452*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 453*3ac0a46fSAndroid Build Coastguard Worker 454*3ac0a46fSAndroid Build Coastguard Worker /** 455*3ac0a46fSAndroid Build Coastguard Worker * 456*3ac0a46fSAndroid Build Coastguard Worker */ 457*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_get_tile(void *jp2, 458*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t *p_stream, 459*3ac0a46fSAndroid Build Coastguard Worker opj_image_t* p_image, 460*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager, 461*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 tile_index); 462*3ac0a46fSAndroid Build Coastguard Worker 463*3ac0a46fSAndroid Build Coastguard Worker 464*3ac0a46fSAndroid Build Coastguard Worker /** 465*3ac0a46fSAndroid Build Coastguard Worker * 466*3ac0a46fSAndroid Build Coastguard Worker */ 467*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_set_decoded_resolution_factor(void *p_jp2, 468*3ac0a46fSAndroid Build Coastguard Worker OPJ_UINT32 res_factor, 469*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 470*3ac0a46fSAndroid Build Coastguard Worker 471*3ac0a46fSAndroid Build Coastguard Worker /** 472*3ac0a46fSAndroid Build Coastguard Worker * Specify extra options for the encoder. 473*3ac0a46fSAndroid Build Coastguard Worker * 474*3ac0a46fSAndroid Build Coastguard Worker * @param p_jp2 the jpeg2000 codec. 475*3ac0a46fSAndroid Build Coastguard Worker * @param p_options options 476*3ac0a46fSAndroid Build Coastguard Worker * @param p_manager the user event manager 477*3ac0a46fSAndroid Build Coastguard Worker * 478*3ac0a46fSAndroid Build Coastguard Worker * @see opj_encoder_set_extra_options() for more details. 479*3ac0a46fSAndroid Build Coastguard Worker */ 480*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_jp2_encoder_set_extra_options( 481*3ac0a46fSAndroid Build Coastguard Worker void *p_jp2, 482*3ac0a46fSAndroid Build Coastguard Worker const char* const* p_options, 483*3ac0a46fSAndroid Build Coastguard Worker opj_event_mgr_t * p_manager); 484*3ac0a46fSAndroid Build Coastguard Worker 485*3ac0a46fSAndroid Build Coastguard Worker 486*3ac0a46fSAndroid Build Coastguard Worker /* TODO MSD: clean these 3 functions */ 487*3ac0a46fSAndroid Build Coastguard Worker /** 488*3ac0a46fSAndroid Build Coastguard Worker * Dump some elements from the JP2 decompression structure . 489*3ac0a46fSAndroid Build Coastguard Worker * 490*3ac0a46fSAndroid Build Coastguard Worker *@param p_jp2 the jp2 codec. 491*3ac0a46fSAndroid Build Coastguard Worker *@param flag flag to describe what elements are dump. 492*3ac0a46fSAndroid Build Coastguard Worker *@param out_stream output stream where dump the elements. 493*3ac0a46fSAndroid Build Coastguard Worker * 494*3ac0a46fSAndroid Build Coastguard Worker */ 495*3ac0a46fSAndroid Build Coastguard Worker void jp2_dump(void* p_jp2, OPJ_INT32 flag, FILE* out_stream); 496*3ac0a46fSAndroid Build Coastguard Worker 497*3ac0a46fSAndroid Build Coastguard Worker /** 498*3ac0a46fSAndroid Build Coastguard Worker * Get the codestream info from a JPEG2000 codec. 499*3ac0a46fSAndroid Build Coastguard Worker * 500*3ac0a46fSAndroid Build Coastguard Worker *@param p_jp2 jp2 codec. 501*3ac0a46fSAndroid Build Coastguard Worker * 502*3ac0a46fSAndroid Build Coastguard Worker *@return the codestream information extract from the jpg2000 codec 503*3ac0a46fSAndroid Build Coastguard Worker */ 504*3ac0a46fSAndroid Build Coastguard Worker opj_codestream_info_v2_t* jp2_get_cstr_info(void* p_jp2); 505*3ac0a46fSAndroid Build Coastguard Worker 506*3ac0a46fSAndroid Build Coastguard Worker /** 507*3ac0a46fSAndroid Build Coastguard Worker * Get the codestream index from a JPEG2000 codec. 508*3ac0a46fSAndroid Build Coastguard Worker * 509*3ac0a46fSAndroid Build Coastguard Worker *@param p_jp2 jp2 codec. 510*3ac0a46fSAndroid Build Coastguard Worker * 511*3ac0a46fSAndroid Build Coastguard Worker *@return the codestream index extract from the jpg2000 codec 512*3ac0a46fSAndroid Build Coastguard Worker */ 513*3ac0a46fSAndroid Build Coastguard Worker opj_codestream_index_t* jp2_get_cstr_index(void* p_jp2); 514*3ac0a46fSAndroid Build Coastguard Worker 515*3ac0a46fSAndroid Build Coastguard Worker 516*3ac0a46fSAndroid Build Coastguard Worker /*@}*/ 517*3ac0a46fSAndroid Build Coastguard Worker 518*3ac0a46fSAndroid Build Coastguard Worker /*@}*/ 519*3ac0a46fSAndroid Build Coastguard Worker 520*3ac0a46fSAndroid Build Coastguard Worker #endif /* OPJ_JP2_H */ 521*3ac0a46fSAndroid Build Coastguard Worker 522