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