Home | History | Annotate | Download | only in libjasper
      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) 2001-2006 Michael David Adams
     13  * Copyright (c) 1999-2000 Image Power, Inc.
     14  * Copyright (c) 1999-2000 The University of British Columbia
     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.2 2008-05-26 09:40:52 vp153 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
    697