[trunk] Remove bool.h, use opj_bool instead
[openjpeg.git] / src / lib / openjpip / index_manager.h
1 /*
2  * $Id$
3  *
4  * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
5  * Copyright (c) 2002-2011, Professor Benoit Macq
6  * Copyright (c) 2010-2011, Kaori Hagihara
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef         INDEX_MANAGER_H_
32 # define        INDEX_MANAGER_H_
33
34 #include "opj_config.h"
35 #include "opj_includes.h"
36
37 #include "byte_manager.h"
38 #include "faixbox_manager.h"
39 #include "metadata_manager.h"
40 #include "mhixbox_manager.h"
41
42 /** progression order */
43 #if 0
44 typedef enum porder {
45   PROG_UNKNOWN = -1,      /**< place-holder */
46   LRCP = 0,               /**< layer-resolution-component-precinct order */
47   RLCP = 1,               /**< resolution-layer-component-precinct order */
48   RPCL = 2,               /**< resolution-precinct-component-layer order */
49   PCRL = 3,               /**< precinct-component-resolution-layer order */
50   CPRL = 4                /**< component-precinct-resolution-layer order */
51 } porder_t;
52 #endif
53
54 /** A.5.1 Image and tile size (SIZ)*/
55 typedef struct SIZmarker_param{
56   Byte2_t Lsiz;              /**< length of marker segment excluding the marker*/
57   Byte2_t Rsiz;              /**< capabilities that a decoder needs*/
58   Byte4_t Xsiz;              /**< width of the reference grid*/
59   Byte4_t Ysiz;              /**< height of the reference grid*/
60   Byte4_t XOsiz;             /**< horizontal offset from the origin of the reference grid to the left side of the image area*/
61   Byte4_t YOsiz;             /**< vertical offset from the origin of the reference grid to the top side of the image area*/
62   Byte4_t XTsiz;             /**< width of one reference tile with respect to the reference grid*/
63   Byte4_t YTsiz;             /**< height of one reference tile with respect to the reference grid*/
64   Byte4_t XTOsiz;            /**< horizontal offset from the origin of the reference grid to the left side of the first tile*/
65   Byte4_t YTOsiz;            /**< vertical offset from the origin of the reference grid to the top side of the first tile*/
66   Byte4_t XTnum;             /**< number of tiles in horizontal direction*/
67   Byte4_t YTnum;             /**< number of tiles in vertical direction*/
68   Byte2_t Csiz;              /**< number of the components in the image*/
69   Byte_t  Ssiz[3];           /**< precision (depth) in bits and sign of the component samples*/
70   Byte_t  XRsiz[3];          /**< horizontal separation of a sample of component with respect to the reference grid*/
71   Byte_t  YRsiz[3];          /**< vertical separation of a sample of component with respect to the reference grid*/
72 } SIZmarker_param_t;
73
74 /** A.6.1 Coding style default (COD)*/
75 typedef struct CODmarker_param{
76   Byte2_t  Lcod;             /**< length of marker segment excluding the marker*/
77   Byte_t   Scod;             /**< Coding style for all components*/
78   OPJ_PROG_ORDER prog_order;       /**< progression order*/
79   Byte2_t  numOflayers;      /**< number of layers*/
80   Byte_t   numOfdecomp;      /**< number of decompositions levels*/
81   Byte4_t  *XPsiz;           /**< dynamic array of precinct width  at successive resolution level in order*/
82   Byte4_t  *YPsiz;           /**< dynamic array of precinct height at successive resolution level in order*/
83 } CODmarker_param_t;
84
85 /** index parameters*/
86 typedef struct index_param{
87   metadatalist_param_t *metadatalist; /**< metadata-bin list*/
88   OPJ_OFF_T offset;                     /**< codestream offset*/
89   Byte8_t length;                     /**< codestream length */
90   Byte8_t mhead_length;               /**< main header length  */
91   SIZmarker_param_t SIZ;              /**< SIZ marker information*/
92   CODmarker_param_t COD;              /**< COD marker information*/
93   faixbox_param_t *tilepart;          /**< tile part information from tpix box*/
94   mhixbox_param_t **tileheader;       /**< dynamic array of tile header information from thix box*/
95   faixbox_param_t **precpacket;       /**< dynamic array of precint packet information from ppix box*/
96 } index_param_t;
97
98
99 /**
100  * parse JP2 file
101  * AnnexI: Indexing JPEG2000 files for JPIP
102  *
103  * @param[in] fd file descriptor of the JP2 file
104  * @return       pointer to the generated structure of index parameters
105  */
106 index_param_t * parse_jp2file( int fd);
107
108 /**
109  * print index parameters
110  *
111  * @param[in] index index parameters
112  */
113 void print_index( index_param_t index);
114
115 /**
116  * print Image and Tile SIZ parameters
117  *
118  * @param[in] SIZ SIZ marker information
119  */
120 void print_SIZ( SIZmarker_param_t SIZ);
121
122 /**
123  * print Coding style default COD parameters
124  *
125  * @param[in] COD COD marker information
126  */
127 void print_COD( CODmarker_param_t COD);
128
129 /**
130  * delete index
131  *
132  * @param[in,out] index addressof the index pointer
133  */
134 void delete_index( index_param_t **index);
135
136 /**
137  * delete dynamic arrays in COD marker
138  *
139  * @param[in] COD COD marker information
140  */
141 void delete_COD( CODmarker_param_t COD);
142
143
144 /** 1-dimensional range parameters*/
145 typedef struct range_param{
146   Byte4_t minvalue; /**< minimal value*/
147   Byte4_t maxvalue; /**< maximal value*/
148 } range_param_t;
149
150 /**
151  * get horizontal range of the tile in reference grid
152  *
153  * @param[in] SIZ      SIZ marker information
154  * @param[in] tile_id  tile id
155  * @param[in] level    decomposition level
156  * @return             structured range parameter
157  */
158 range_param_t get_tile_Xrange( SIZmarker_param_t SIZ, Byte4_t tile_id, int level);
159
160 /**
161  * get vertical range of the tile in reference grid
162  *
163  * @param[in] SIZ      SIZ marker information
164  * @param[in] tile_id  tile id
165  * @param[in] level    decomposition level
166  * @return             structured range parameter
167  */
168 range_param_t get_tile_Yrange( SIZmarker_param_t SIZ, Byte4_t tile_id, int level);
169
170
171 /**
172  * get tile wdith at the decomposition level
173  *
174  * @param[in] SIZ      SIZ marker information
175  * @param[in] tile_id  tile id
176  * @param[in] level    decomposition level
177  * @return             tile width
178  */
179 Byte4_t get_tile_XSiz( SIZmarker_param_t SIZ, Byte4_t tile_id, int level);
180 Byte4_t get_tile_YSiz( SIZmarker_param_t SIZ, Byte4_t tile_id, int level);
181
182
183 /**
184  * answers if the target is feasible to JPT-stream
185  *
186  * @param[in] index index parameters
187  * @return    true if JPT-stream is feasible
188  */
189 opj_bool isJPTfeasible( index_param_t index);
190
191 #endif      /* !INDEX_MANAGER_H_ */