223 lines
6.7 KiB
C
223 lines
6.7 KiB
C
|
/*
|
||
|
* Copyright (c) 2001-2002, David Janssens
|
||
|
* Copyright (c) 2003, Yannick Verschueren
|
||
|
* Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions
|
||
|
* are met:
|
||
|
* 1. Redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer.
|
||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer in the
|
||
|
* documentation and/or other materials provided with the distribution.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||
|
*/
|
||
|
|
||
|
#define VERSION "0.0.8"
|
||
|
|
||
|
#ifdef WIN32
|
||
|
#ifdef LIBJ2K_EXPORTS
|
||
|
#define LIBJ2K_API __declspec(dllexport)
|
||
|
#else
|
||
|
#define LIBJ2K_API __declspec(dllimport)
|
||
|
#endif
|
||
|
#else
|
||
|
#define LIBJ2K_API
|
||
|
#endif
|
||
|
|
||
|
#ifndef __J2K_H
|
||
|
#define __J2K_H
|
||
|
|
||
|
#define J2K_MAXRLVLS 33
|
||
|
#define J2K_MAXBANDS (3*J2K_MAXRLVLS+1)
|
||
|
|
||
|
#define J2K_CP_CSTY_PRT 0x01
|
||
|
#define J2K_CP_CSTY_SOP 0x02
|
||
|
#define J2K_CP_CSTY_EPH 0x04
|
||
|
#define J2K_CCP_CSTY_PRT 0x01
|
||
|
#define J2K_CCP_CBLKSTY_LAZY 0x01
|
||
|
#define J2K_CCP_CBLKSTY_RESET 0x02
|
||
|
#define J2K_CCP_CBLKSTY_TERMALL 0x04
|
||
|
#define J2K_CCP_CBLKSTY_VSC 0x08
|
||
|
#define J2K_CCP_CBLKSTY_PTERM 0x10
|
||
|
#define J2K_CCP_CBLKSTY_SEGSYM 0x20
|
||
|
#define J2K_CCP_QNTSTY_NOQNT 0
|
||
|
#define J2K_CCP_QNTSTY_SIQNT 1
|
||
|
#define J2K_CCP_QNTSTY_SEQNT 2
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
int dx, dy; // XRsiz, YRsiz
|
||
|
int prec; // precision
|
||
|
int bpp; // deapth of image in bits
|
||
|
int sgnd; // signed
|
||
|
int *data; // image-component data
|
||
|
} j2k_comp_t;
|
||
|
|
||
|
typedef struct {
|
||
|
int x0, y0; // XOsiz, YOsiz
|
||
|
int x1, y1; // Xsiz, Ysiz
|
||
|
int numcomps; // number of components
|
||
|
int index_on; // 0 = no index || 1 = index
|
||
|
//int PPT;
|
||
|
j2k_comp_t *comps; // image-components
|
||
|
} j2k_image_t;
|
||
|
|
||
|
typedef struct {
|
||
|
int expn; // exponent
|
||
|
int mant; // mantissa
|
||
|
} j2k_stepsize_t;
|
||
|
|
||
|
typedef struct {
|
||
|
int csty; // coding style
|
||
|
int numresolutions; // number of resolutions
|
||
|
int cblkw; // width of code-blocks
|
||
|
int cblkh; // height of code-blocks
|
||
|
int cblksty; // code-block coding style
|
||
|
int qmfbid; // discrete wavelet transform identifier
|
||
|
int qntsty; // quantisation style
|
||
|
j2k_stepsize_t stepsizes[J2K_MAXBANDS]; // stepsizes used for quantisation
|
||
|
int numgbits; // number of guard bits
|
||
|
int roishift; // Region Of Interest shift
|
||
|
int prcw[J2K_MAXRLVLS]; // Precinct width
|
||
|
int prch[J2K_MAXRLVLS]; // Precinct height
|
||
|
} j2k_tccp_t;
|
||
|
|
||
|
typedef struct {
|
||
|
int resno0, compno0;
|
||
|
int layno1, resno1, compno1;
|
||
|
int prg;
|
||
|
int tile;
|
||
|
char progorder[4];
|
||
|
} j2k_poc_t;
|
||
|
|
||
|
typedef struct {
|
||
|
int csty; // coding style
|
||
|
int prg; // progression order
|
||
|
int numlayers; // number of layers
|
||
|
int mct; // multi-component transform identifier
|
||
|
int rates[100]; // rates of layers
|
||
|
int numpocs; // number of progression order changes
|
||
|
j2k_poc_t pocs[32]; // progression order changes
|
||
|
j2k_tccp_t *tccps; // tile-component coding parameters
|
||
|
} j2k_tcp_t;
|
||
|
|
||
|
typedef struct {
|
||
|
int tx0, ty0; // XTOsiz, YTOsiz
|
||
|
int tdx, tdy; // XTsiz, YTsiz
|
||
|
int tw, th;
|
||
|
j2k_tcp_t *tcps; // tile coding parameters
|
||
|
} j2k_cp_t;
|
||
|
|
||
|
typedef struct {
|
||
|
int len;
|
||
|
int len_header;
|
||
|
int offset;
|
||
|
} info_layer_t;
|
||
|
|
||
|
typedef struct {
|
||
|
info_layer_t *layer;
|
||
|
} info_prec_t;
|
||
|
|
||
|
typedef struct {
|
||
|
info_prec_t *prec;
|
||
|
} info_reso_t;
|
||
|
|
||
|
typedef struct {
|
||
|
info_reso_t *reso;
|
||
|
} info_compo_t;
|
||
|
|
||
|
typedef struct {
|
||
|
int num_tile; // Number of Tile
|
||
|
int start_pos; // Start position
|
||
|
int end_header; // End position of the header
|
||
|
int end_pos; // End position
|
||
|
int pw, ph; // number of precinct by tile
|
||
|
int num_packet; // number of packet in the tile
|
||
|
info_compo_t *compo; // component [packet]
|
||
|
} info_tile_t; // index struct
|
||
|
|
||
|
typedef struct {
|
||
|
int type; // type of marker [SIZ, QCD, POC, PPM, CRG] appearing only once
|
||
|
int start_pos; // Start position of the marker
|
||
|
int len; // Length of the marker
|
||
|
} info_marker_t; // index struct
|
||
|
|
||
|
typedef struct{
|
||
|
info_marker_t *COD;
|
||
|
int num_COD;
|
||
|
info_marker_t *COC;
|
||
|
int num_COC;
|
||
|
info_marker_t *RGN;
|
||
|
int num_RGN;
|
||
|
info_marker_t *QCC;
|
||
|
int num_QCC;
|
||
|
info_marker_t *TLM;
|
||
|
int num_TLM;
|
||
|
info_marker_t *PLM;
|
||
|
int num_PLM;
|
||
|
info_marker_t *PPM;
|
||
|
int num_PPM;
|
||
|
info_marker_t *COM;
|
||
|
int num_COM;
|
||
|
} info_marker_mul_t; // index struct
|
||
|
|
||
|
typedef struct {
|
||
|
int index_on;
|
||
|
int num; // numero of packet
|
||
|
int index_write; // writing the packet inthe index with t2_encode_packets
|
||
|
int Im_w, Im_h; // Image width and Height
|
||
|
int Prog; // progression order
|
||
|
int Tile_x, Tile_y; // Number of Tile in X and Y
|
||
|
int tw, th;
|
||
|
int Comp; // Component numbers
|
||
|
int Layer; // number of layer
|
||
|
int Decomposition; // number of decomposition
|
||
|
int pw, ph; // nombre precinct in X and Y
|
||
|
int pdx, pdy; // size of precinct in X and Y
|
||
|
int Main_head_end; // Main header position
|
||
|
int codestream_size; // codestream's size
|
||
|
info_tile_t *tile; // information concerning tiles inside image
|
||
|
info_marker_t *marker; // information concerning markers inside image [only one apparition]
|
||
|
info_marker_mul_t marker_mul; // information concerning markers inside image [multiple apparition]
|
||
|
int num_marker; // number of marker
|
||
|
int num_packet_max; // MAximum number of packet
|
||
|
} info_image_t; // index struct
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Encode an image into a JPEG-2000 codestream
|
||
|
* i: image to encode
|
||
|
* cp: coding parameters
|
||
|
* dest: destination buffer
|
||
|
* len: length of destination buffer
|
||
|
* index : index file name
|
||
|
*/
|
||
|
LIBJ2K_API int j2k_encode(j2k_image_t *i, j2k_cp_t *cp,char *outfile, int len,char *index);
|
||
|
|
||
|
//LIBJ2K_API int j2k_encode(j2k_image_t *i, j2k_cp_t *cp,unsigned char *dest, int len);
|
||
|
/*
|
||
|
* Decode an image from a JPEG-2000 codestream
|
||
|
* src: source buffer
|
||
|
* len: length of source buffer
|
||
|
* i: decode image
|
||
|
* cp: coding parameters that were used to encode the image
|
||
|
*/
|
||
|
LIBJ2K_API int j2k_decode(unsigned char *src, int len, j2k_image_t **i, j2k_cp_t **cp);
|
||
|
|
||
|
#endif
|