]> Creatis software - gdcm.git/blob - src/gdcmjasper/src/libjasper/jpc/jpc_dec.h
1bdb3ca305581f0e38bb15bd753b555536cef679
[gdcm.git] / src / gdcmjasper / src / libjasper / jpc / jpc_dec.h
1 /*
2  * Copyright (c) 1999-2000 Image Power, Inc. and the University of
3  *   British Columbia.
4  * Copyright (c) 2001-2002 Michael David Adams.
5  * All rights reserved.
6  */
7
8 /* __START_OF_JASPER_LICENSE__
9  * 
10  * JasPer License Version 2.0
11  * 
12  * Copyright (c) 1999-2000 Image Power, Inc.
13  * Copyright (c) 1999-2000 The University of British Columbia
14  * Copyright (c) 2001-2003 Michael David Adams
15  * 
16  * All rights reserved.
17  * 
18  * Permission is hereby granted, free of charge, to any person (the
19  * "User") obtaining a copy of this software and associated documentation
20  * files (the "Software"), to deal in the Software without restriction,
21  * including without limitation the rights to use, copy, modify, merge,
22  * publish, distribute, and/or sell copies of the Software, and to permit
23  * persons to whom the Software is furnished to do so, subject to the
24  * following conditions:
25  * 
26  * 1.  The above copyright notices and this permission notice (which
27  * includes the disclaimer below) shall be included in all copies or
28  * substantial portions of the Software.
29  * 
30  * 2.  The name of a copyright holder shall not be used to endorse or
31  * promote products derived from the Software without specific prior
32  * written permission.
33  * 
34  * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
35  * LICENSE.  NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER
36  * THIS DISCLAIMER.  THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
37  * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
38  * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
39  * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  IN NO
40  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
41  * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
42  * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
43  * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
44  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.  NO ASSURANCES ARE
45  * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE
46  * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY.
47  * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS
48  * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL
49  * PROPERTY RIGHTS OR OTHERWISE.  AS A CONDITION TO EXERCISING THE RIGHTS
50  * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE
51  * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY.  THE SOFTWARE
52  * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL
53  * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES,
54  * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL
55  * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH
56  * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH,
57  * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH
58  * RISK ACTIVITIES").  THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY
59  * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES.
60  * 
61  * __END_OF_JASPER_LICENSE__
62  */
63
64 /*
65  * JPEG-2000 Decoder
66  *
67  * $Id: jpc_dec.h,v 1.1 2005/05/22 18:33:04 malaterre Exp $
68  */
69
70 #ifndef JPC_DEC_H
71 #define JPC_DEC_H
72
73 /******************************************************************************\
74 * Includes.
75 \******************************************************************************/
76
77 #include "jasper/jas_stream.h"
78
79 #include "jpc_tsfb.h"
80 #include "jpc_bs.h"
81 #include "jpc_tagtree.h"
82 #include "jpc_cs.h"
83 #include "jpc_cod.h"
84 #include "jpc_mqdec.h"
85 #include "jpc_t2cod.h"
86
87 /******************************************************************************\
88 * Below are some ugly warts necessary to support packed packet headers.
89 \******************************************************************************/
90
91 /* PPM/PPT marker segment table entry. */
92
93 typedef struct {
94
95   /* The index for this entry. */
96   uint_fast16_t ind;
97
98   /* The data length. */
99   uint_fast32_t len;
100
101   /* The data. */
102   uchar *data;
103
104 } jpc_ppxstabent_t;
105
106 /* PPM/PPT marker segment table. */
107
108 typedef struct {
109
110   /* The number of entries. */
111   int numents;
112
113   /* The maximum number of entries (i.e., the allocated size of the array
114     below). */
115   int maxents;
116
117   /* The table entries. */
118   jpc_ppxstabent_t **ents;
119
120 } jpc_ppxstab_t;
121
122 /* Stream list class. */
123
124 typedef struct {
125
126   /* The number of streams in this list. */
127   int numstreams;
128
129   /* The maximum number of streams that can be accomodated without
130     growing the streams array. */
131   int maxstreams;
132
133   /* The streams. */
134   jas_stream_t **streams;
135
136 } jpc_streamlist_t;
137
138 /******************************************************************************\
139 * Coding parameters class.
140 \******************************************************************************/
141
142 /* Per-component coding parameters. */
143
144 typedef struct {
145
146   /* How were various coding parameters set? */
147   int flags;
148
149   /* Per-component coding style parameters (e.g., explicit precinct sizes) */
150   uint_fast8_t csty;
151
152   /* The number of resolution levels. */
153   uint_fast8_t numrlvls;
154
155   /* The code block width exponent. */
156   uint_fast8_t cblkwidthexpn;
157
158   /* The code block height exponent. */
159   uint_fast8_t cblkheightexpn;
160
161   /* The QMFB ID. */
162   uint_fast8_t qmfbid;
163
164   /* The quantization style. */
165   uint_fast8_t qsty;
166
167   /* The number of quantizer step sizes. */
168   uint_fast16_t numstepsizes;
169
170   /* The step sizes. */
171   uint_fast16_t stepsizes[3 * JPC_MAXRLVLS + 1];
172
173   /* The number of guard bits. */
174   uint_fast8_t numguardbits;
175
176   /* The ROI shift value. */
177   uint_fast8_t roishift;
178
179   /* The code block parameters. */
180   uint_fast8_t cblkctx;
181
182   /* The precinct width exponents. */
183   uint_fast8_t prcwidthexpns[JPC_MAXRLVLS];
184
185   /* The precinct height exponents. */
186   uint_fast8_t prcheightexpns[JPC_MAXRLVLS];
187
188 } jpc_dec_ccp_t;
189
190 /* Coding paramters. */
191
192 typedef struct {
193
194   /* How were these coding parameters set? */
195   int flags;
196
197   /* Progression change list. */
198   jpc_pchglist_t *pchglist;
199
200   /* Progression order. */
201   uint_fast8_t prgord;
202
203   /* The number of layers. */
204   uint_fast16_t numlyrs;
205
206   /* The MCT ID. */
207   uint_fast8_t mctid;
208
209   /* The coding style parameters (e.g., SOP, EPH). */
210   uint_fast8_t csty;
211
212   /* The number of components. */
213   int numcomps;
214
215   /* The per-component coding parameters. */
216   jpc_dec_ccp_t *ccps;
217
218 } jpc_dec_cp_t;
219
220 /******************************************************************************\
221 * Decoder class.
222 \******************************************************************************/
223
224 /* Decoder per-segment state information. */
225
226 typedef struct jpc_dec_seg_s {
227
228   /* The next segment in the list. */
229   struct jpc_dec_seg_s *next;
230
231   /* The previous segment in the list. */
232   struct jpc_dec_seg_s *prev;
233
234   /* The starting pass number for this segment. */
235   int passno;
236
237   /* The number of passes in this segment. */
238   int numpasses;
239
240   /* The maximum number of passes in this segment. */
241   int maxpasses;
242
243   /* The type of data in this segment (i.e., MQ or raw). */
244   int type;
245
246   /* A stream containing the data for this segment. */
247   jas_stream_t *stream;
248
249   /* The number of bytes destined for this segment from the packet
250     currently being decoded. */
251   int cnt;
252
253   /* A flag indicating if this segment has been terminated. */
254   int complete;
255
256   /* The layer number to which this segment belongs. */
257   /* If the segment spans multiple layers, then the largest layer number
258     spanned by the segment is used. */
259   int lyrno;
260
261 } jpc_dec_seg_t;
262
263 /* Decoder segment list. */
264
265 typedef struct {
266
267   /* The first entry in the list. */
268   jpc_dec_seg_t *head;
269
270   /* The last entry in the list. */
271   jpc_dec_seg_t *tail;
272
273 } jpc_dec_seglist_t;
274
275 /* Decoder per-code-block state information. */
276
277 typedef struct {
278
279   /* The number of passes. */
280   int numpasses;
281
282   /* A list of segments that still need to be decoded. */
283   jpc_dec_seglist_t segs;
284
285   /* The first incomplete/partial segment. */
286   jpc_dec_seg_t *curseg;
287
288   /* The number of leading insignificant bit planes for this code block. */
289   int numimsbs;
290
291   /* The number of bits used to encode pass data lengths. */
292   int numlenbits;
293
294   /* The first pass number containing data for this code block. */
295   int firstpassno;
296
297   /* The MQ decoder. */
298   jpc_mqdec_t *mqdec;
299
300   /* The raw bit stream decoder. */
301   jpc_bitstream_t *nulldec;
302
303   /* The per-sample state information for this code block. */
304   jas_matrix_t *flags;
305
306   /* The sample data associated with this code block. */
307   jas_matrix_t *data;
308
309 } jpc_dec_cblk_t;
310
311 /* Decoder per-code-block-group state information. */
312
313 typedef struct {
314
315   /* The x-coordinate of the top-left corner of the precinct. */
316   uint_fast32_t xstart;
317
318   /* The y-coordinate of the top-left corner of the precinct. */
319   uint_fast32_t ystart;
320
321   /* The x-coordinate of the bottom-right corner of the precinct
322     (plus one). */
323   uint_fast32_t xend;
324
325   /* The y-coordinate of the bottom-right corner of the precinct
326     (plus one). */
327   uint_fast32_t yend;
328
329   /* The number of code blocks spanning this precinct in the horizontal
330     direction. */
331   int numhcblks;
332
333   /* The number of code blocks spanning this precinct in the vertical
334     direction. */
335   int numvcblks;
336
337   /* The total number of code blocks in this precinct. */
338   int numcblks;
339
340   /* The per code block information. */
341   jpc_dec_cblk_t *cblks;
342
343   /* The inclusion tag tree. */
344   jpc_tagtree_t *incltagtree;
345
346   /* The insignificant MSBs tag tree. */
347   jpc_tagtree_t *numimsbstagtree;
348
349 } jpc_dec_prc_t;
350
351 /* Decoder per-band state information. */
352
353 typedef struct {
354
355   /* The per-code-block-group state information. */
356   jpc_dec_prc_t *prcs;
357
358   /* The sample data associated with this band. */
359   jas_matrix_t *data;
360
361   /* The orientation of this band (i.e., LL, LH, HL, or HH). */
362   int orient;
363
364   /* The encoded quantizer step size. */
365   int stepsize;
366
367   /* The absolute quantizer step size. */
368   jpc_fix_t absstepsize;
369
370   /* The number of bit planes for this band. */
371   int numbps;
372
373   /* The analysis gain associated with this band. */
374   int analgain;
375
376   /* The ROI shift value for this band. */
377   int roishift;
378
379 } jpc_dec_band_t;
380
381 /* Decoder per-resolution-level state information. */
382
383 typedef struct {
384
385   /* The number of bands associated with this resolution level. */
386   int numbands;
387
388   /* The per-band information. */
389   jpc_dec_band_t *bands;
390
391   /* The x-coordinate of the top-left corner of the tile-component
392     at this resolution. */
393   uint_fast32_t xstart;
394
395   /* The y-coordinate of the top-left corner of the tile-component
396     at this resolution. */
397   uint_fast32_t ystart;
398
399   /* The x-coordinate of the bottom-right corner of the tile-component
400     at this resolution (plus one). */
401   uint_fast32_t xend;
402
403   /* The y-coordinate of the bottom-right corner of the tile-component
404     at this resolution (plus one). */
405   uint_fast32_t yend;
406
407   /* The exponent value for the nominal precinct width measured
408     relative to the associated LL band. */
409   int prcwidthexpn;
410
411   /* The exponent value for the nominal precinct height measured
412     relative to the associated LL band. */
413   int prcheightexpn;
414
415   /* The number of precincts in the horizontal direction. */
416   int numhprcs;
417
418   /* The number of precincts in the vertical direction. */
419   int numvprcs;
420
421   /* The total number of precincts. */
422   int numprcs;
423
424   /* The exponent value for the nominal code block group width.
425     This quantity is associated with the next lower resolution level
426     (assuming that there is one). */
427   int cbgwidthexpn;
428
429   /* The exponent value for the nominal code block group height
430     This quantity is associated with the next lower resolution level
431     (assuming that there is one). */
432   int cbgheightexpn;
433
434   /* The exponent value for the code block width. */
435   uint_fast16_t cblkwidthexpn;
436
437   /* The exponent value for the code block height. */
438   uint_fast16_t cblkheightexpn;
439
440 } jpc_dec_rlvl_t;
441
442 /* Decoder per-tile-component state information. */
443
444 typedef struct {
445
446   /* The x-coordinate of the top-left corner of the tile-component
447     in the coordinate system of the tile-component. */
448   uint_fast32_t xstart;
449
450   /* The y-coordinate of the top-left corner of the tile-component
451     in the coordinate system of the tile-component. */
452   uint_fast32_t ystart;
453
454   /* The x-coordinate of the bottom-right corner of the tile-component
455     in the coordinate system of the tile-component (plus one). */
456   uint_fast32_t xend;
457
458   /* The y-coordinate of the bottom-right corner of the tile-component
459     in the coordinate system of the tile-component (plus one). */
460   uint_fast32_t yend;
461
462   /* The component data for the current tile. */
463   jas_matrix_t *data;
464
465   /* The number of resolution levels. */
466   int numrlvls;
467
468   /* The per resolution level information. */
469   jpc_dec_rlvl_t *rlvls;
470
471   /* The TSFB. */
472   jpc_tsfb_t *tsfb;
473
474 } jpc_dec_tcomp_t;
475
476 /*
477  * Tile states.
478  */
479
480 #define  JPC_TILE_INIT  0
481 #define  JPC_TILE_ACTIVE  1
482 #define  JPC_TILE_ACTIVELAST  2
483 #define  JPC_TILE_DONE  3
484
485 /* Decoder per-tile state information. */
486
487 typedef struct {
488
489   /* The processing state for this tile. */
490   int state;
491
492   /* The x-coordinate of the top-left corner of the tile on the reference
493     grid. */
494   uint_fast32_t xstart;
495
496   /* The y-coordinate of the top-left corner of the tile on the reference
497     grid. */
498   uint_fast32_t ystart;
499
500   /* The x-coordinate of the bottom-right corner of the tile on the
501     reference grid (plus one). */
502   uint_fast32_t xend;
503
504   /* The y-coordinate of the bottom-right corner of the tile on the
505     reference grid (plus one). */
506   uint_fast32_t yend;
507
508   /* The packed packet header data for this tile. */
509   jpc_ppxstab_t *pptstab;
510
511   /* A stream containing the packed packet header data for this tile. */
512   jas_stream_t *pkthdrstream;
513
514   /* The current position within the packed packet header stream. */
515   long pkthdrstreampos;
516
517   /* The coding parameters for this tile. */
518   jpc_dec_cp_t *cp;
519
520   /* The per tile-component information. */
521   jpc_dec_tcomp_t *tcomps;
522
523   /* The next expected tile-part number. */
524   int partno;
525
526   /* The number of tile-parts. */
527   int numparts;
528
529   /* The coding mode. */
530   int realmode;
531
532   /* The packet iterator for this tile. */
533   jpc_pi_t *pi;
534
535 } jpc_dec_tile_t;
536
537 /* Decoder per-component state information. */
538
539 typedef struct {
540
541   /* The horizontal sampling period. */
542   uint_fast32_t hstep;
543
544   /* The vertical sampling period. */
545   uint_fast32_t vstep;
546
547   /* The number of samples in the horizontal direction. */
548   uint_fast32_t width;
549
550   /* The number of samples in the vertical direction. */
551   uint_fast32_t height;
552
553   /* The precision of the sample data. */
554   uint_fast16_t prec;
555
556   /* The signedness of the sample data. */
557   bool sgnd;
558
559   /* The sample alignment horizontal offset. */
560   uint_fast32_t hsubstep;
561   
562   /* The sample alignment vertical offset. */
563   uint_fast32_t vsubstep;
564
565 } jpc_dec_cmpt_t;
566
567 /* Decoder state information. */
568
569 typedef struct {
570
571   /* The decoded image. */
572   jas_image_t *image;
573
574   /* The x-coordinate of the top-left corner of the image area on
575     the reference grid. */
576   uint_fast32_t xstart;
577
578   /* The y-coordinate of the top-left corner of the image area on
579     the reference grid. */
580   uint_fast32_t ystart;
581
582   /* The x-coordinate of the bottom-right corner of the image area on
583     the reference grid (plus one). */
584   uint_fast32_t xend;
585
586   /* The y-coordinate of the bottom-right corner of the image area on
587     the reference grid (plus one). */
588   uint_fast32_t yend;
589
590   /* The nominal tile width in units of the image reference grid. */
591   uint_fast32_t tilewidth;
592
593   /* The nominal tile height in units of the image reference grid. */
594   uint_fast32_t tileheight;
595
596   /* The horizontal offset from the origin of the reference grid to the
597     left side of the first tile. */
598   uint_fast32_t tilexoff;
599
600   /* The vertical offset from the origin of the reference grid to the
601     top side of the first tile. */
602   uint_fast32_t tileyoff;
603
604   /* The number of tiles spanning the image area in the vertical
605     direction. */
606   int numhtiles;
607
608   /* The number of tiles spanning the image area in the horizontal
609     direction. */
610   int numvtiles;
611
612   /* The total number of tiles. */
613   int numtiles;
614
615   /* The per-tile information. */
616   jpc_dec_tile_t *tiles;
617
618   /* The tile currently being processed. */
619   jpc_dec_tile_t *curtile;
620
621   /* The number of components. */
622   int numcomps;
623
624   /* The stream containing the input JPEG-2000 code stream data. */
625   jas_stream_t *in;
626
627   /* The default coding parameters for all tiles. */
628   jpc_dec_cp_t *cp;
629
630   /* The maximum number of layers that may be decoded. */
631   int maxlyrs;
632
633   /* The maximum number of packets that may be decoded. */
634   int maxpkts;
635
636   /* The number of packets decoded so far in the processing of the entire
637     code stream. */
638   int numpkts;
639
640   /* The next expected PPM marker segment sequence number. */
641   int ppmseqno;
642
643   /* The current state for code stream processing. */
644   int state;
645
646   /* The per-component information. */
647   jpc_dec_cmpt_t *cmpts;
648
649   /* The information from PPM marker segments. */
650   jpc_ppxstab_t *ppmstab;
651
652   /* A list of streams containing packet header data from PPM marker
653     segments. */
654   jpc_streamlist_t *pkthdrstreams;
655
656   /* The expected ending offset for a tile-part. */
657   long curtileendoff;
658
659   /* This is required by the tier-2 decoder. */
660   jpc_cstate_t *cstate;
661
662 } jpc_dec_t;
663
664 /* Decoder options. */
665
666 typedef struct {
667
668   /* The debug level for the decoder. */
669   int debug;
670
671   /* The maximum number of layers to decode. */
672   int maxlyrs;
673
674   /* The maximum number of packets to decode. */
675   int maxpkts;
676
677 } jpc_dec_importopts_t;
678
679 /******************************************************************************\
680 * Functions.
681 \******************************************************************************/
682
683 /* Create a decoder segment object. */
684 jpc_dec_seg_t *jpc_seg_alloc(void);
685
686 /* Destroy a decoder segment object. */
687 void jpc_seg_destroy(jpc_dec_seg_t *seg);
688
689 /* Remove a segment from a segment list. */
690 void jpc_seglist_remove(jpc_dec_seglist_t *list, jpc_dec_seg_t *node);
691
692 /* Insert a segment into a segment list. */
693 void jpc_seglist_insert(jpc_dec_seglist_t *list, jpc_dec_seg_t *ins,
694   jpc_dec_seg_t *node);
695
696 #endif