[1.5] enabled JPP stream in JPIP (result of GSoC program)
[openjpeg.git] / applications / jpip / libopenjpip / msgqueue_manager.h
1 /*
2  * $Id: msgqueue_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  * Copyright (c) 2011,      Lucian Corlaciu, GSoC
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 #ifndef         MSGQUEUE_MANAGER_H_
33 # define        MSGQUEUE_MANAGER_H_
34
35 #include "bool.h"
36 #include "byte_manager.h"
37 #include "cachemodel_manager.h"
38 #include "placeholder_manager.h"
39
40 #define PRECINCT_MSG 0
41 #define EXT_PRECINCT_MSG 1
42 #define TILE_HEADER_MSG 2
43 #define TILE_MSG 4
44 #define EXT_TILE_MSG 5
45 #define MAINHEADER_MSG 6
46 #define METADATA_MSG 8
47
48 //! message parameters
49 typedef struct message_param{
50   bool    last_byte;          //!< if message contains the last byte of the data-bin
51   Byte8_t in_class_id;        //!< in-class identifier A.2.3
52   Byte8_t class_id;           //!< class identifiers 
53   Byte8_t csn;                //!< index of the codestream
54   Byte8_t bin_offset;         //!< offset of the data in this message from the start of the data-bin
55   Byte8_t length;             //!< message byte length
56   Byte8_t aux;                //!<
57   Byte8_t res_offset;         //!< offset in the resource
58   placeholder_param_t *phld;  //!< placeholder pointer in index
59   struct message_param *next; //!< pointer to the next message
60 } message_param_t;
61
62 //! message queue parameters
63 typedef struct msgqueue_param{
64   message_param_t *first; //!< first message pointer of the list
65   message_param_t *last;  //!< last  message pointer of the list
66   bool stateless;         //!< if this is a stateless message queue
67   cachemodel_param_t *cachemodel; //!< reference cachemodel pointer
68 } msgqueue_param_t;
69
70 /**
71  * generate message queue
72  *
73  * @param[in] stateless   if this is a stateless message queue
74  * @param[in] cachemodel  cachemodel pointer
75  * @return                generated message queue pointer
76  */
77 msgqueue_param_t * gene_msgqueue( bool stateless, cachemodel_param_t *cachemodel);
78
79 /**
80  * delete message queue
81  *
82  * @param[in] msgqueue address of the message queue pointer
83  */
84 void delete_msgqueue( msgqueue_param_t **msgqueue);
85
86 /**
87  * delete a message in msgqueue
88  *
89  * @param[in] message  address of the deleting message pointer
90  * @param[in] msgqueue message queue pointer
91  */
92 void delete_message_in_msgqueue( message_param_t **message, msgqueue_param_t *msgqueue);
93
94 /**
95  * print message queue
96  *
97  * @param[in] msgqueue message queue pointer
98  */
99 void print_msgqueue( msgqueue_param_t *msgqueue);
100
101
102 /**
103  * enqueue main header data-bin into message queue
104  *
105  * @param[in,out] msgqueue message queue pointer
106  */
107 void enqueue_mainheader( msgqueue_param_t *msgqueue);
108
109
110 /**
111  * enqueue tile headers data-bin into message queue
112  *
113  * @param[in]     tile_id  tile id starting from 0
114  * @param[in,out] msgqueue message queue pointer
115  */
116 void enqueue_tileheader( int tile_id, msgqueue_param_t *msgqueue);
117
118
119 /**
120  * enqueue tile data-bin into message queue
121  *
122  * @param[in]     tile_id  tile id starting from 0
123  * @param[in]     level    decomposition level
124  * @param[in,out] msgqueue message queue pointer
125  */
126 void enqueue_tile( int tile_id, int level, msgqueue_param_t *msgqueue);
127
128 /**
129  * enqueue precinct data-bin into message queue
130  *
131  * @param[in]     seq_id   precinct sequence number within its tile
132  * @param[in]     tile_id  tile index
133  * @param[in]     comp_id  component number
134  * @param[in,out] msgqueue message queue
135  */
136 void enqueue_precinct( int seq_id, int tile_id, int comp_id, msgqueue_param_t *msgqueue);
137
138
139 /**
140  * enqueue Metadata-bin into message queue
141  *
142  * @param[in]     meta_id  metadata-bin id
143  * @param[in,out] msgqueue message queue pointer
144  */
145 void enqueue_metadata( int meta_id, msgqueue_param_t *msgqueue);
146
147
148 /**
149  * emit stream from message queue
150  *
151  * @param[in] msgqueue message queue pointer
152  */
153 void emit_stream_from_msgqueue( msgqueue_param_t *msgqueue);
154
155
156 /**
157  * parse JPT- JPP- stream to message queue
158  *
159  * @param[in]     JPIPstream   JPT- JPP- stream data pointer
160  * @param[in]     streamlen    JPIPstream length
161  * @param[in]     offset       offset of the stream from the whole beginning
162  * @param[in,out] msgqueue     adding message queue pointer
163  */
164 void parse_JPIPstream( Byte_t *JPIPstream, Byte8_t streamlen, Byte8_t offset, msgqueue_param_t *msgqueue);
165
166 /**
167  * parse JPT- JPP- stream to message queue
168  *
169  * @param[in] msgqueue     reference message queue pointer
170  * @param[in] stream       stream data pointer
171  * @param[in] streamlen    stream length
172  * @param[in] metadatalist adding metadata list pointer
173  */
174 void parse_metamsg( msgqueue_param_t *msgqueue, Byte_t *stream, Byte8_t streamlen, metadatalist_param_t *metadatalist);
175
176 /**
177  * compute precinct ID A.3.2.1
178  *
179  * @param[in]  t                 tile index
180  * @param[in]  c                 component index
181  * @param[in]  s                 sequence number
182  * @param[in]  num_components    total number of components
183  * @param[in]  num_tiles         total number of tiles
184  * @return                       precicnt id
185  */
186 Byte8_t comp_precinct_id( int t, int c, int s, int num_components, int num_tiles);
187
188 #endif      /* !MSGQUEUE_MANAGER_H_ */