enabled JPP-stream
[openjpeg.git] / applications / jpip / libopenjpip / index_manager.h
1 /*
2  * $Id: index_manager.h 53 2011-05-09 16:55:39Z kaori $
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 "byte_manager.h"
35 #include "faixbox_manager.h"
36 #include "metadata_manager.h"
37 #include "mhixbox_manager.h"
38
39 //! progression order 
40 typedef enum porder {
41   PROG_UNKNOWN = -1,      /**< place-holder */
42   LRCP = 0,               /**< layer-resolution-component-precinct order */
43   RLCP = 1,               /**< resolution-layer-component-precinct order */
44   RPCL = 2,               /**< resolution-precinct-component-layer order */
45   PCRL = 3,               /**< precinct-component-resolution-layer order */
46   CPRL = 4                /**< component-precinct-resolution-layer order */
47 } porder_t;
48
49 //! A.5.1 Image and tile size (SIZ)
50 typedef struct SIZmarker_param{
51   Byte2_t Lsiz;              //!< length of marker segment excluding the marker
52   Byte2_t Rsiz;              //!< capabilities that a decoder needs
53   Byte4_t Xsiz;              //!< width of the reference grid
54   Byte4_t Ysiz;              //!< height of the reference grid
55   Byte4_t XOsiz;             //!< horizontal offset from the origin of the reference grid to the left side of the image area
56   Byte4_t YOsiz;             //!< vertical offset from the origin of the reference grid to the top side of the image area
57   Byte4_t XTsiz;             //!< width of one reference tile with respect to the reference grid
58   Byte4_t YTsiz;             //!< height of one reference tile with respect to the reference grid
59   Byte4_t XTOsiz;            //!< horizontal offset from the origin of the reference grid to the left side of the first tile
60   Byte4_t YTOsiz;            //!< vertical offset from the origin of the reference grid to the top side of the first tile
61   Byte4_t XTnum;             //!< number of tiles in horizontal direction
62   Byte4_t YTnum;             //!< number of tiles in vertical direction
63   Byte2_t Csiz;              //!< number of the components in the image
64   Byte_t  Ssiz[3];           //!< precision (depth) in bits and sign of the component samples
65   Byte_t  XRsiz[3];          //!< horizontal separation of a sample of component with respect to the reference grid
66   Byte_t  YRsiz[3];          //!< vertical separation of a sample of component with respect to the reference grid
67 } SIZmarker_param_t;
68
69 //! A.6.1 Coding style default (COD)
70 typedef struct CODmarker_param{
71   Byte2_t  Lcod;             //!< length of marker segment excluding the marker
72   Byte_t   Scod;             //!< Coding style for all components
73   porder_t prog_order;       //!< progression order
74   Byte2_t  numOflayers;      //!< number of layers
75   Byte_t   numOfdecomp;      //!< number of decompositions levels
76   Byte4_t  *XPsiz;           //!< dynamic array of precinct width  at successive resolution level in order
77   Byte4_t  *YPsiz;           //!< dynamic array of precinct height at successive resolution level in order
78 } CODmarker_param_t;
79
80 //! index parameters
81 typedef struct index_param{
82   metadatalist_param_t *metadatalist; //!< metadata-bin list
83   Byte8_t offset;            //!< codestream offset
84   Byte8_t length;            //!< codestream length 
85   Byte8_t mhead_length;      //!< main header length  
86   SIZmarker_param_t SIZ;     // !< SIZ marker information
87   CODmarker_param_t COD;     // !< COD marker information
88   faixbox_param_t *tilepart;     //!< tile part information from tpix box
89   mhixbox_param_t **tileheader;  //!< dynamic array of tile header information from thix box
90   faixbox_param_t **precpacket;  //!< dynamic array of precint packet information from ppix box
91 } index_param_t;
92
93
94 /**
95  * parse JP2 file
96  * AnnexI: Indexing JPEG2000 files for JPIP
97  *
98  * @param[in] fd file descriptor of the JP2 file
99  * @return       pointer to the generated structure of index parameters
100  */
101 index_param_t * parse_jp2file( int fd);
102
103 /**
104  * print index parameters
105  *
106  * @param[in] index index parameters
107  */
108 void print_index( index_param_t index);
109
110 /**
111  * print Image and Tile SIZ parameters
112  *
113  * @param[in] SIZ SIZ marker information
114  */
115 void print_SIZ( SIZmarker_param_t SIZ);
116
117 /**
118  * print Coding style default COD parameters
119  *
120  * @param[in] COD COD marker information
121  */
122 void print_COD( CODmarker_param_t COD);
123
124 /**
125  * delete index
126  *
127  * @param[in,out] index addressof the index pointer
128  */
129 void delete_index( index_param_t **index);
130
131 //! 1-dimensional range parameters
132 typedef struct range_param{
133   Byte4_t minvalue; //!< minimal value
134   Byte4_t maxvalue; //!< maximal value
135 } range_param_t;
136
137 /**
138  * get horizontal range of the tile in reference grid
139  *
140  * @param[in] SIZ      SIZ marker information
141  * @param[in] tile_id  tile id
142  * @param[in] level    decomposition level
143  * @return             structured range parameter
144  */
145 range_param_t get_tile_Xrange( SIZmarker_param_t SIZ, Byte4_t tile_id, int level);
146
147 /**
148  * get vertical range of the tile in reference grid
149  *
150  * @param[in] SIZ      SIZ marker information
151  * @param[in] tile_id  tile id
152  * @param[in] level    decomposition level
153  * @return             structured range parameter
154  */
155 range_param_t get_tile_Yrange( SIZmarker_param_t SIZ, Byte4_t tile_id, int level);
156
157
158 /**
159  * get tile wdith at the decomposition level
160  *
161  * @param[in] SIZ      SIZ marker information
162  * @param[in] tile_id  tile id
163  * @param[in] level    decomposition level
164  * @return             tile width
165  */
166 Byte4_t get_tile_XSiz( SIZmarker_param_t SIZ, Byte4_t tile_id, int level);
167 Byte4_t get_tile_YSiz( SIZmarker_param_t SIZ, Byte4_t tile_id, int level);
168
169 #endif      /* !INDEX_MANAGER_H_ */