remove deprecated v1 style function j2k_read_cod
[openjpeg.git] / libopenjpeg / pi.h
index f450304a8d291dedc0c03cf280506287b77a5ea9..d1c8abf50954988cfae52407b1d189dff4b18c22 100644 (file)
@@ -1,5 +1,10 @@
 /*
- * Copyright (c) 2001-2002, David Janssens
+ * 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-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 #ifndef __PI_H
 #define __PI_H
+/**
+@file pi.h
+@brief Implementation of a packet iterator (PI)
 
-#include "j2k.h"
-#include "tcd.h"
-
-typedef struct {
-       int pdx, pdy;
-       int pw, ph;
-} pi_resolution_t;
-
-typedef struct {
-       int dx, dy;
-       int numresolutions;
-       pi_resolution_t *resolutions;
-} pi_comp_t;
-
-typedef struct {
-        short int *include;                     /* precise if the packet has been already used (usefull for progression order change) */
-        int step_l, step_r, step_c, step_p;     /* different steps (layer, resolution, component, precinct) to localize the packet in the include vector */ 
-       int compno, resno, precno, layno;       /* component, resolution, precinct and layer that indentify the packet */
-        int first;                              /* 0 if the first packet */
-       j2k_poc_t poc;
+The functions in PI.C have for goal to realize a packet iterator that permits to get the next
+packet following the progression order and change of it. The functions in PI.C are used
+by some function in T2.C.
+*/
+
+/** @defgroup PI PI - Implementation of a packet iterator */
+/*@{*/
+
+/**
+FIXME: documentation
+*/
+typedef struct opj_pi_resolution {
+  int pdx, pdy;
+  int pw, ph;
+} opj_pi_resolution_t;
+
+/**
+FIXME: documentation
+*/
+typedef struct opj_pi_comp {
+  int dx, dy;
+  /** number of resolution levels */
+  int numresolutions;
+  opj_pi_resolution_t *resolutions;
+} opj_pi_comp_t;
+
+/** 
+Packet iterator 
+*/
+typedef struct opj_pi_iterator {
+       /** Enabling Tile part generation*/
+       char tp_on;
+       /** precise if the packet has been already used (usefull for progression order change) */
+       short int *include;
+       /** layer step used to localize the packet in the include vector */
+       int step_l;
+       /** resolution step used to localize the packet in the include vector */
+       int step_r;     
+       /** component step used to localize the packet in the include vector */
+       int step_c;     
+       /** precinct step used to localize the packet in the include vector */
+       int step_p;     
+       /** component that identify the packet */
+       int compno;
+       /** resolution that identify the packet */
+       int resno;
+       /** precinct that identify the packet */
+       int precno;
+       /** layer that identify the packet */
+       int layno;   
+       /** 0 if the first packet */
+       int first;
+       /** progression order change information */
+       opj_poc_t poc;
+       /** number of components in the image */
        int numcomps;
-       pi_comp_t *comps;
+       /** Components*/
+       opj_pi_comp_t *comps;
        int tx0, ty0, tx1, ty1;
        int x, y, dx, dy;
-} pi_iterator_t;                               /* packet iterator */
+} opj_pi_iterator_t;
 
-/*
- * Create a packet iterator
- * img: raw image for which the packets will be listed
- * cp: coding paremeters
- * tileno: number that identifies the tile for which to list the packets
- * return value: returns a packet iterator that points to the first packet of the tile
- */
-pi_iterator_t *pi_create(j2k_image_t * img, j2k_cp_t * cp, int tileno);
+/** @name Exported functions */
+/*@{*/
+/* ----------------------------------------------------------------------- */
+/**
+Create a packet iterator for Encoder
+@param image Raw image for which the packets will be listed
+@param cp Coding parameters
+@param tileno Number that identifies the tile for which to list the packets
+@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass
+@return Returns a packet iterator that points to the first packet of the tile
+@see pi_destroy
+*/
+opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp, int tileno,J2K_T2_MODE t2_mode);
+
+/**
+ * Creates a packet iterator for encoding.
+ *
+ * @param      p_image         the image being encoded.
+ * @param      p_cp            the coding parameters.
+ * @param      p_tile_no       index of the tile being encoded.
+ * @param      p_t2_mode       the type of pass for generating the packet iterator
+ * @return     a list of packet iterator that points to the first packet of the tile (not true).
+*/
+opj_pi_iterator_t *pi_initialise_encode_v2(    const struct opj_image *image,
+                                                                                       struct opj_cp_v2 *cp,
+                                                                                       OPJ_UINT32 tileno,
+                                                                                       J2K_T2_MODE t2_mode);
+
+
+/**
+ * Updates the encoding parameters of the codec.
+ *
+ * @param      p_image         the image being encoded.
+ * @param      p_cp            the coding parameters.
+ * @param      p_tile_no       index of the tile being encoded.
+*/
+void pi_update_encoding_parameters(    const struct opj_image *p_image,
+                                                                       struct opj_cp_v2 *p_cp,
+                                                                       OPJ_UINT32 p_tile_no );
+
+/**
+Modify the packet iterator for enabling tile part generation
+@param pi Handle to the packet iterator generated in pi_initialise_encode  
+@param cp Coding parameters
+@param tileno Number that identifies the tile for which to list the packets
+@param pino Iterator index for pi
+@param tpnum Tile part number of the current tile
+@param tppos The position of the tile part flag in the progression order
+@param t2_mode If == 0 In Threshold calculation ,If == 1 Final pass
+@param cur_totnum_tp The total number of tile parts in the current tile
+@return Returns true if an error is detected 
+*/
+opj_bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp);
 
-/* 
- * Modify the packet iterator to point to the next packet
- * pi: packet iterator to modify
- * return value: returns 0 if pi pointed to the last packet or else returns 1 
+/**
+Modify the packet iterator for enabling tile part generation
+@param pi Handle to the packet iterator generated in pi_initialise_encode
+@param cp Coding parameters
+@param tileno Number that identifies the tile for which to list the packets
+@param tpnum Tile part number of the current tile
+@param tppos The position of the tile part flag in the progression order
+*/
+void pi_create_encode_v2( opj_pi_iterator_t *pi, struct opj_cp_v2 *cp,OPJ_UINT32 tileno, OPJ_UINT32 pino,OPJ_UINT32 tpnum, OPJ_INT32 tppos, J2K_T2_MODE t2_mode);
+
+
+
+/**
+Create a packet iterator for Decoder
+@param image Raw image for which the packets will be listed
+@param cp Coding parameters
+@param tileno Number that identifies the tile for which to list the packets
+@return Returns a packet iterator that points to the first packet of the tile
+@see pi_destroy
+*/
+opj_pi_iterator_t *pi_create_decode(opj_image_t * image, opj_cp_t * cp, int tileno);
+
+
+/**
+Create a packet iterator for Decoder
+@param image Raw image for which the packets will be listed
+@param cp Coding parameters
+@param tileno Number that identifies the tile for which to list the packets
+@return Returns a packet iterator that points to the first packet of the tile
+@see pi_destroy
+*/
+opj_pi_iterator_t *pi_create_decode_v2(struct opj_image * image, struct opj_cp_v2 * cp, OPJ_UINT32 tileno);
+
+
+/**
+Destroy a packet iterator
+@param pi Previously created packet iterator
+@param cp Coding parameters
+@param tileno Number that identifies the tile for which the packets were listed
+@see pi_create
+*/
+void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno);
+
+
+/**
+ * Destroys a packet iterator array.
+ *
+ * @param      p_pi                    the packet iterator array to destroy.
+ * @param      p_nb_elements   the number of elements in the array.
  */
-int pi_next(pi_iterator_t * pi);
+void pi_destroy_v2(
+                               opj_pi_iterator_t *p_pi,
+                               OPJ_UINT32 p_nb_elements);
+
+/**
+Modify the packet iterator to point to the next packet
+@param pi Packet iterator to modify
+@return Returns false if pi pointed to the last packet or else returns true 
+*/
+opj_bool pi_next(opj_pi_iterator_t * pi);
+/* ----------------------------------------------------------------------- */
+/*@}*/
+
+/*@}*/
 
-#endif
+#endif /* __PI_H */