jpc_dec.h - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       jpc_dec.h (17919B)
       ---
            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 1918 2005-07-24 14:12:08Z baford $
           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