Bug fixed by Sylvain Munaut. Change in the reading of the POC marker. Since COD/COC...
[openjpeg.git] / libopenjpeg / openjpeg.h
index 90d23639fe9dcfaf7f1adef4fdb397118e7a51ff..d866cc6d513c1160dd4273b5d6ed77bc2c5aeec9 100644 (file)
@@ -1,9 +1,11 @@
  /*
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herv Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * Copyright (c) 2006-2007, Parvatha Elangovan
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,7 +32,7 @@
 #ifndef OPENJPEG_H
 #define OPENJPEG_H
 
-#define OPENJPEG_VERSION "1.0.0"
+#define OPENJPEG_VERSION "1.1.1"
 
 /* 
 ==========================================================
@@ -89,20 +91,48 @@ braindamage below.
 ==========================================================
 */
 
-#ifndef MAX_PATH
-#define MAX_PATH 260   /**< Maximum allowed size for filenames */
-#endif /* MAX_PATH */
+#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */
 
 #define J2K_MAXRLVLS 33                                        /**< Number of maximum resolution level authorized */
 #define J2K_MAXBANDS (3*J2K_MAXRLVLS-2)        /**< Number of maximum sub-band linked to number of resolution level */
 
+/* UniPG>> */
+#define JPWL_MAX_NO_TILESPECS  16 /**< Maximum number of tile parts expected by JPWL: increase at your will */
+#define JPWL_MAX_NO_PACKSPECS  16 /**< Maximum number of packet parts expected by JPWL: increase at your will */
+#define JPWL_MAX_NO_MARKERS    512 /**< Maximum number of JPWL markers: increase at your will */
+#define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */
+#define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */
+#define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */
+#define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */
+/* <<UniPG */
+
 /* 
 ==========================================================
    enum definitions
 ==========================================================
 */
+/** 
+Rsiz Capabilities
+*/
+typedef enum RSIZ_CAPABILITIES {
+       STD_RSIZ = 0,           /** Standard JPEG2000 profile*/
+       CINEMA2K = 3,           /** Profile name for a 2K image*/
+       CINEMA4K = 4            /** Profile name for a 4K image*/
+} OPJ_RSIZ_CAPABILITIES;
+
+/** 
+Digital cinema operation mode 
+*/
+typedef enum CINEMA_MODE {
+       OFF = 0,                                        /** Not Digital Cinema*/
+       CINEMA2K_24 = 1,        /** 2K Digital Cinema at 24 fps*/
+       CINEMA2K_48 = 2,        /** 2K Digital Cinema at 48 fps*/
+       CINEMA4K_24 = 3         /** 4K Digital Cinema at 24 fps*/
+}OPJ_CINEMA_MODE;
 
-/** Progression order */
+/** 
+Progression order 
+*/
 typedef enum PROG_ORDER {
        PROG_UNKNOWN = -1,      /**< place-holder */
        LRCP = 0,               /**< layer-resolution-component-precinct order */
@@ -132,6 +162,15 @@ typedef enum CODEC_FORMAT {
        CODEC_JP2 = 2           /**< JPEG-2000 file format : read/write */
 } OPJ_CODEC_FORMAT;
 
+/** 
+Limit decoding to certain portions of the codestream. 
+*/
+typedef enum LIMIT_DECODING {
+       NO_LIMITATION = 0,                                /**< No limitation for the decoding. The entire codestream will de decoded */
+       LIMIT_TO_MAIN_HEADER = 1,               /**< The decoding is limited to the Main Header */
+       DECODE_ALL_BUT_PACKETS = 2      /**< Decode everything except the JPEG 2000 packets */
+} OPJ_LIMIT_DECODING;
+
 /* 
 ==========================================================
    event manager typedef definitions
@@ -174,11 +213,28 @@ typedef struct opj_event_mgr {
 Progression order changes
 */
 typedef struct opj_poc {
-  int resno0, compno0;
-  int layno1, resno1, compno1;
-  OPJ_PROG_ORDER prg;
-  int tile;
-  char progorder[4];
+       /** Resolution num start, Component num start, given by POC */
+       int resno0, compno0;
+       /** Layer num end,Resolution num end, Component num end, given by POC */
+       int layno1, resno1, compno1;
+       /** Layer num start,Precinct num start, Precinct num end */
+       int layno0, precno0, precno1;
+       /** Progression order enum*/
+       OPJ_PROG_ORDER prg1,prg;
+       /** Progression order string*/
+       char progorder[5];
+       /** Tile number */
+       int tile;
+       /** Start and end values for Tile width and height*/
+       int tx0,tx1,ty0,ty1;
+       /** Start value, initialised in pi_initialise_encode*/
+       int layS, resS, compS, prcS;
+       /** End value, initialised in pi_initialise_encode */
+       int layE, resE, compE, prcE;
+       /** Start and end values of Tile width and height, initialised in pi_initialise_encode*/
+       int txS,txE,tyS,tyE,dx,dy;
+       /** Temporary values for Tile parts, initialised in pi_create_encode */
+       int lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t;
 } opj_poc_t;
 
 /**
@@ -216,7 +272,7 @@ typedef struct opj_cparameters {
        /** number of layers */
        int tcp_numlayers;
        /** rates of layers */
-       int tcp_rates[100];
+       float tcp_rates[100];
        /** different psnr for successive layers */
        float tcp_distoratio[100];
        /** number of resolutions */
@@ -243,13 +299,13 @@ typedef struct opj_cparameters {
        /**@name command line encoder parameters (not used inside the library) */
        /*@{*/
        /** input file name */
-       char infile[MAX_PATH];
+       char infile[OPJ_PATH_LEN];
        /** output file name */
-       char outfile[MAX_PATH];
+       char outfile[OPJ_PATH_LEN];
        /** creation of an index file, default to 0 (false) */
        int index_on;
        /** index file name */
-       char index[MAX_PATH];
+       char index[OPJ_PATH_LEN];
        /** subimage encoding: origin image offset in x direction */
        int image_offset_x0;
        /** subimage encoding: origin image offset in y direction */
@@ -258,11 +314,56 @@ typedef struct opj_cparameters {
        int subsampling_dx;
        /** subsampling value for dy */
        int subsampling_dy;
-       /** input file format 0: PGX, 1: PxM, 2: BMP */
+       /** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/
        int decod_format;
        /** output file format 0: J2K, 1: JP2, 2: JPT */
        int cod_format;
        /*@}*/
+
+/* UniPG>> */
+       /**@name JPWL encoding parameters */
+       /*@{*/
+       /** enables writing of EPC in MH, thus activating JPWL */
+       bool jpwl_epc_on;
+       /** error protection method for MH (0,1,16,32,37-128) */
+       int jpwl_hprot_MH;
+       /** tile number of header protection specification (>=0) */
+       int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
+       /** error protection methods for TPHs (0,1,16,32,37-128) */
+       int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS];
+       /** tile number of packet protection specification (>=0) */
+       int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS];
+       /** packet number of packet protection specification (>=0) */
+       int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS];
+       /** error protection methods for packets (0,1,16,32,37-128) */
+       int jpwl_pprot[JPWL_MAX_NO_PACKSPECS];
+       /** enables writing of ESD, (0=no/1/2 bytes) */
+       int jpwl_sens_size;
+       /** sensitivity addressing size (0=auto/2/4 bytes) */
+       int jpwl_sens_addr;
+       /** sensitivity range (0-3) */
+       int jpwl_sens_range;
+       /** sensitivity method for MH (-1=no,0-7) */
+       int jpwl_sens_MH;
+       /** tile number of sensitivity specification (>=0) */
+       int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
+       /** sensitivity methods for TPHs (-1=no,0-7) */
+       int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS];
+       /*@}*/
+/* <<UniPG */
+
+       /** Digital Cinema compliance 0-not compliant, 1-compliant*/
+       OPJ_CINEMA_MODE cp_cinema;
+       /** Maximum rate for each component. If == 0, component size limitation is not considered */
+       int max_comp_size;
+       /** Profile name*/
+       OPJ_RSIZ_CAPABILITIES cp_rsiz;
+       /** Tile part generation*/
+       char tp_on;
+       /** Flag for Tile part generation*/
+       char tp_flag;
+       /** MCT (multiple component transform) */
+       char tcp_mct;
 } opj_cparameters_t;
 
 /**
@@ -288,14 +389,35 @@ typedef struct opj_dparameters {
        /**@name command line encoder parameters (not used inside the library) */
        /*@{*/
        /** input file name */
-       char infile[MAX_PATH];
+       char infile[OPJ_PATH_LEN];
        /** output file name */
-       char outfile[MAX_PATH];
+       char outfile[OPJ_PATH_LEN];
        /** input file format 0: J2K, 1: JP2, 2: JPT */
        int decod_format;
        /** output file format 0: PGX, 1: PxM, 2: BMP */
        int cod_format;
        /*@}*/
+
+/* UniPG>> */
+       /**@name JPWL decoding parameters */
+       /*@{*/
+       /** activates the JPWL correction capabilities */
+       bool jpwl_correct;
+       /** expected number of components */
+       int jpwl_exp_comps;
+       /** maximum number of tiles */
+       int jpwl_max_tiles;
+       /*@}*/
+/* <<UniPG */
+
+       /** 
+       Specify whether the decoding should be done on the entire codestream, or be limited to the main header
+       Limiting the decoding to the main header makes it possible to extract the characteristics of the codestream
+       if == NO_LIMITATION, the entire codestream is decoded; 
+       if == LIMIT_TO_MAIN_HEADER, only the main header is decoded; 
+       */
+       OPJ_LIMIT_DECODING cp_limit_decoding;
+
 } opj_dparameters_t;
 
 /** Common fields between JPEG-2000 compression and decompression master structs. */
@@ -306,7 +428,8 @@ typedef struct opj_dparameters {
        bool is_decompressor;           /**< So common code can tell which is which */\
        OPJ_CODEC_FORMAT codec_format;  /**< selected codec */\
        void *j2k_handle;                       /**< pointer to the J2K codec */\
-       void *jp2_handle                        /**< pointer to the JP2 codec */
+       void *jp2_handle;                       /**< pointer to the JP2 codec */\
+       void *mj2_handle                        /**< pointer to the MJ2 codec */
        
 /* Routines that are to be used by both halves of the library are declared
  * to receive a pointer to this structure.  There are no actual instances of