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 * $Id: jpc_enc.h,v 1.2 2008-05-26 09:40:52 vp153 Exp $ 66 */ 67 68 #ifndef JPC_ENC_H 69 #define JPC_ENC_H 70 71 /******************************************************************************\ 72 * Includes. 73 \******************************************************************************/ 74 75 #include "jasper/jas_seq.h" 76 77 #include "jpc_t2cod.h" 78 #include "jpc_mqenc.h" 79 #include "jpc_cod.h" 80 #include "jpc_tagtree.h" 81 #include "jpc_cs.h" 82 #include "jpc_flt.h" 83 #include "jpc_tsfb.h" 84 85 /******************************************************************************\ 86 * Constants. 87 \******************************************************************************/ 88 89 /* The number of bits used in various lookup tables. */ 90 #define JPC_NUMEXTRABITS JPC_NMSEDEC_FRACBITS 91 92 /* An invalid R-D slope value. */ 93 #define JPC_BADRDSLOPE (-1) 94 95 /******************************************************************************\ 96 * Coding parameters types. 97 \******************************************************************************/ 98 99 /* Per-component coding paramters. */ 100 101 typedef struct { 102 103 /* The horizontal sampling period. */ 104 uint_fast8_t sampgrdstepx; 105 106 /* The vertical sampling period. */ 107 uint_fast8_t sampgrdstepy; 108 109 /* The sample alignment horizontal offset. */ 110 uint_fast8_t sampgrdsubstepx; 111 112 /* The sample alignment vertical offset. */ 113 uint_fast8_t sampgrdsubstepy; 114 115 /* The precision of the samples. */ 116 uint_fast8_t prec; 117 118 /* The signedness of the samples. */ 119 bool sgnd; 120 121 /* The number of step sizes. */ 122 uint_fast16_t numstepsizes; 123 124 /* The quantizer step sizes. */ 125 uint_fast16_t stepsizes[JPC_MAXBANDS]; 126 127 } jpc_enc_ccp_t; 128 129 /* Per-tile coding parameters. */ 130 131 typedef struct { 132 133 /* The coding mode. */ 134 bool intmode; 135 136 /* The coding style (i.e., SOP, EPH). */ 137 uint_fast8_t csty; 138 139 /* The progression order. */ 140 uint_fast8_t prg; 141 142 /* The multicomponent transform. */ 143 uint_fast8_t mctid; 144 145 /* The number of layers. */ 146 uint_fast16_t numlyrs; 147 148 /* The normalized bit rates associated with the various 149 intermediate layers. */ 150 jpc_fix_t *ilyrrates; 151 152 } jpc_enc_tcp_t; 153 154 /* Per tile-component coding parameters. */ 155 156 typedef struct { 157 158 /* The coding style (i.e., explicit precinct sizes). */ 159 uint_fast8_t csty; 160 161 /* The maximum number of resolution levels allowed. */ 162 uint_fast8_t maxrlvls; 163 164 /* The exponent for the nominal code block width. */ 165 uint_fast16_t cblkwidthexpn; 166 167 /* The exponent for the nominal code block height. */ 168 uint_fast16_t cblkheightexpn; 169 170 /* The code block style parameters (e.g., lazy, terminate all, 171 segmentation symbols, causal, reset probability models). */ 172 uint_fast8_t cblksty; 173 174 /* The QMFB. */ 175 uint_fast8_t qmfbid; 176 177 /* The precinct width values. */ 178 uint_fast16_t prcwidthexpns[JPC_MAXRLVLS]; 179 180 /* The precinct height values. */ 181 uint_fast16_t prcheightexpns[JPC_MAXRLVLS]; 182 183 /* The number of guard bits. */ 184 uint_fast8_t numgbits; 185 186 } jpc_enc_tccp_t; 187 188 /* Coding parameters. */ 189 190 typedef struct { 191 192 /* The debug level. */ 193 int debug; 194 195 /* The horizontal offset from the origin of the reference grid to the 196 left edge of the image area. */ 197 uint_fast32_t imgareatlx; 198 199 /* The vertical offset from the origin of the reference grid to the 200 top edge of the image area. */ 201 uint_fast32_t imgareatly; 202 203 /* The horizontal offset from the origin of the reference grid to the 204 right edge of the image area (plus one). */ 205 uint_fast32_t refgrdwidth; 206 207 /* The vertical offset from the origin of the reference grid to the 208 bottom edge of the image area (plus one). */ 209 uint_fast32_t refgrdheight; 210 211 /* The horizontal offset from the origin of the tile grid to the 212 origin of the reference grid. */ 213 uint_fast32_t tilegrdoffx; 214 215 /* The vertical offset from the origin of the tile grid to the 216 origin of the reference grid. */ 217 uint_fast32_t tilegrdoffy; 218 219 /* The nominal tile width in units of the image reference grid. */ 220 uint_fast32_t tilewidth; 221 222 /* The nominal tile height in units of the image reference grid. */ 223 uint_fast32_t tileheight; 224 225 /* The number of tiles spanning the image area in the horizontal 226 direction. */ 227 uint_fast32_t numhtiles; 228 229 /* The number of tiles spanning the image area in the vertical 230 direction. */ 231 uint_fast32_t numvtiles; 232 233 /* The number of tiles. */ 234 uint_fast32_t numtiles; 235 236 /* The number of components. */ 237 uint_fast16_t numcmpts; 238 239 /* The per-component coding parameters. */ 240 jpc_enc_ccp_t *ccps; 241 242 /* The per-tile coding parameters. */ 243 jpc_enc_tcp_t tcp; 244 245 /* The per-tile-component coding parameters. */ 246 jpc_enc_tccp_t tccp; 247 248 /* The target code stream length in bytes. */ 249 uint_fast32_t totalsize; 250 251 /* The raw (i.e., uncompressed) size of the image in bytes. */ 252 uint_fast32_t rawsize; 253 254 } jpc_enc_cp_t; 255 256 /******************************************************************************\ 257 * Encoder class. 258 \******************************************************************************/ 259 260 /* Encoder per-coding-pass state information. */ 261 262 typedef struct { 263 264 /* The starting offset for this pass. */ 265 int start; 266 267 /* The ending offset for this pass. */ 268 int end; 269 270 /* The type of data in this pass (i.e., MQ or raw). */ 271 int type; 272 273 /* Flag indicating that this pass is terminated. */ 274 int term; 275 276 /* The entropy coder state after coding this pass. */ 277 jpc_mqencstate_t mqencstate; 278 279 /* The layer to which this pass has been assigned. */ 280 int lyrno; 281 282 /* The R-D slope for this pass. */ 283 jpc_flt_t rdslope; 284 285 /* The weighted MSE reduction associated with this pass. */ 286 jpc_flt_t wmsedec; 287 288 /* The cumulative weighted MSE reduction. */ 289 jpc_flt_t cumwmsedec; 290 291 /* The normalized MSE reduction. */ 292 long nmsedec; 293 294 } jpc_enc_pass_t; 295 296 /* Encoder per-code-block state information. */ 297 298 typedef struct { 299 300 /* The number of passes. */ 301 int numpasses; 302 303 /* The per-pass information. */ 304 jpc_enc_pass_t *passes; 305 306 /* The number of passes encoded so far. */ 307 int numencpasses; 308 309 /* The number of insignificant MSBs. */ 310 int numimsbs; 311 312 /* The number of bits used to encode pass data lengths. */ 313 int numlenbits; 314 315 /* The byte stream for this code block. */ 316 jas_stream_t *stream; 317 318 /* The entropy encoder. */ 319 jpc_mqenc_t *mqenc; 320 321 /* The data for this code block. */ 322 jas_matrix_t *data; 323 324 /* The state for this code block. */ 325 jas_matrix_t *flags; 326 327 /* The number of bit planes required for this code block. */ 328 int numbps; 329 330 /* The next pass to be encoded. */ 331 jpc_enc_pass_t *curpass; 332 333 /* The per-code-block-group state information. */ 334 struct jpc_enc_prc_s *prc; 335 336 /* The saved current pass. */ 337 /* This is used by the rate control code. */ 338 jpc_enc_pass_t *savedcurpass; 339 340 /* The saved length indicator size. */ 341 /* This is used by the rate control code. */ 342 int savednumlenbits; 343 344 /* The saved number of encoded passes. */ 345 /* This is used by the rate control code. */ 346 int savednumencpasses; 347 348 } jpc_enc_cblk_t; 349 350 /* Encoder per-code-block-group state information. */ 351 352 typedef struct jpc_enc_prc_s { 353 354 /* The x-coordinate of the top-left corner of the precinct. */ 355 uint_fast32_t tlx; 356 357 /* The y-coordinate of the top-left corner of the precinct. */ 358 uint_fast32_t tly; 359 360 /* The x-coordinate of the bottom-right corner of the precinct 361 (plus one). */ 362 uint_fast32_t brx; 363 364 /* The y-coordinate of the bottom-right corner of the precinct 365 (plus one). */ 366 uint_fast32_t bry; 367 368 /* The number of code blocks spanning the precinct in the horizontal 369 direction. */ 370 int numhcblks; 371 372 /* The number of code blocks spanning the precinct in the vertical 373 direction. */ 374 int numvcblks; 375 376 /* The total number of code blocks. */ 377 int numcblks; 378 379 /* The per-code-block information. */ 380 jpc_enc_cblk_t *cblks; 381 382 /* The inclusion tag tree. */ 383 jpc_tagtree_t *incltree; 384 385 /* The insignifcant MSBs tag tree. */ 386 jpc_tagtree_t *nlibtree; 387 388 /* The per-band information. */ 389 struct jpc_enc_band_s *band; 390 391 /* The saved inclusion tag tree. */ 392 /* This is used by rate control. */ 393 jpc_tagtree_t *savincltree; 394 395 /* The saved leading-insignificant-bit-planes tag tree. */ 396 /* This is used by rate control. */ 397 jpc_tagtree_t *savnlibtree; 398 399 } jpc_enc_prc_t; 400 401 /* Encoder per-band state information. */ 402 403 typedef struct jpc_enc_band_s { 404 405 /* The per precinct information. */ 406 jpc_enc_prc_t *prcs; 407 408 /* The coefficient data for this band. */ 409 jas_matrix_t *data; 410 411 /* The orientation of this band (i.e., LL, LH, HL, or HH). */ 412 int orient; 413 414 /* The number of bit planes associated with this band. */ 415 int numbps; 416 417 /* The quantizer step size. */ 418 jpc_fix_t absstepsize; 419 420 /* The encoded quantizer step size. */ 421 int stepsize; 422 423 /* The L2 norm of the synthesis basis functions associated with 424 this band. (The MCT is not considered in this value.) */ 425 jpc_fix_t synweight; 426 427 /* The analysis gain for this band. */ 428 int analgain; 429 430 /* The per-resolution-level information. */ 431 struct jpc_enc_rlvl_s *rlvl; 432 433 } jpc_enc_band_t; 434 435 /* Encoder per-resolution-level state information. */ 436 437 typedef struct jpc_enc_rlvl_s { 438 439 /* The x-coordinate of the top-left corner of the tile-component 440 at this resolution. */ 441 uint_fast32_t tlx; 442 443 /* The y-coordinate of the top-left corner of the tile-component 444 at this resolution. */ 445 uint_fast32_t tly; 446 447 /* The x-coordinate of the bottom-right corner of the tile-component 448 at this resolution (plus one). */ 449 uint_fast32_t brx; 450 451 /* The y-coordinate of the bottom-right corner of the tile-component 452 at this resolution (plus one). */ 453 uint_fast32_t bry; 454 455 /* The exponent value for the nominal precinct width measured 456 relative to the associated LL band. */ 457 int prcwidthexpn; 458 459 /* The exponent value for the nominal precinct height measured 460 relative to the associated LL band. */ 461 int prcheightexpn; 462 463 /* The number of precincts spanning the resolution level in the 464 horizontal direction. */ 465 int numhprcs; 466 467 /* The number of precincts spanning the resolution level in the 468 vertical direction. */ 469 int numvprcs; 470 471 /* The total number of precincts. */ 472 int numprcs; 473 474 /* The exponent value for the nominal code block group width. 475 This quantity is associated with the next lower resolution level 476 (assuming that there is one). */ 477 int cbgwidthexpn; 478 479 /* The exponent value for the nominal code block group height. 480 This quantity is associated with the next lower resolution level 481 (assuming that there is one). */ 482 int cbgheightexpn; 483 484 /* The exponent value for the code block width. */ 485 uint_fast16_t cblkwidthexpn; 486 487 /* The exponent value for the code block height. */ 488 uint_fast16_t cblkheightexpn; 489 490 /* The number of bands associated with this resolution level. */ 491 int numbands; 492 493 /* The per-band information. */ 494 jpc_enc_band_t *bands; 495 496 /* The parent tile-component. */ 497 struct jpc_enc_tcmpt_s *tcmpt; 498 499 } jpc_enc_rlvl_t; 500 501 /* Encoder per-tile-component state information. */ 502 503 typedef struct jpc_enc_tcmpt_s { 504 505 /* The number of resolution levels. */ 506 int numrlvls; 507 508 /* The per-resolution-level information. */ 509 jpc_enc_rlvl_t *rlvls; 510 511 /* The tile-component data. */ 512 jas_matrix_t *data; 513 514 /* The QMFB. */ 515 int qmfbid; 516 517 /* The number of bands. */ 518 int numbands; 519 520 /* The TSFB. */ 521 jpc_tsfb_t *tsfb; 522 523 /* The synthesis energy weight (for the MCT). */ 524 jpc_fix_t synweight; 525 526 /* The precinct width exponents. */ 527 int prcwidthexpns[JPC_MAXRLVLS]; 528 529 /* The precinct height exponents. */ 530 int prcheightexpns[JPC_MAXRLVLS]; 531 532 /* The code block width exponent. */ 533 int cblkwidthexpn; 534 535 /* The code block height exponent. */ 536 int cblkheightexpn; 537 538 /* Coding style (i.e., explicit precinct sizes). */ 539 int csty; 540 541 /* Code block style. */ 542 int cblksty; 543 544 /* The number of quantizer step sizes. */ 545 int numstepsizes; 546 547 /* The encoded quantizer step sizes. */ 548 uint_fast16_t stepsizes[JPC_MAXBANDS]; 549 550 /* The parent tile. */ 551 struct jpc_enc_tile_s *tile; 552 553 } jpc_enc_tcmpt_t; 554 555 /* Encoder per-tile state information. */ 556 557 typedef struct jpc_enc_tile_s { 558 559 /* The tile number. */ 560 uint_fast32_t tileno; 561 562 /* The x-coordinate of the top-left corner of the tile measured with 563 respect to the reference grid. */ 564 uint_fast32_t tlx; 565 566 /* The y-coordinate of the top-left corner of the tile measured with 567 respect to the reference grid. */ 568 uint_fast32_t tly; 569 570 /* The x-coordinate of the bottom-right corner of the tile measured 571 with respect to the reference grid (plus one). */ 572 uint_fast32_t brx; 573 574 /* The y-coordinate of the bottom-right corner of the tile measured 575 with respect to the reference grid (plus one). */ 576 uint_fast32_t bry; 577 578 /* The coding style. */ 579 uint_fast8_t csty; 580 581 /* The progression order. */ 582 uint_fast8_t prg; 583 584 /* The number of layers. */ 585 int numlyrs; 586 587 /* The MCT to employ (if any). */ 588 uint_fast8_t mctid; 589 590 /* The packet iterator (used to determine the order of packet 591 generation). */ 592 jpc_pi_t *pi; 593 594 /* The coding mode (i.e., integer or real). */ 595 bool intmode; 596 597 /* The number of bytes to allocate to the various layers. */ 598 uint_fast32_t *lyrsizes; 599 600 /* The number of tile-components. */ 601 int numtcmpts; 602 603 /* The per tile-component information. */ 604 jpc_enc_tcmpt_t *tcmpts; 605 606 /* The raw (i.e., uncompressed) size of this tile. */ 607 uint_fast32_t rawsize; 608 609 } jpc_enc_tile_t; 610 611 /* Encoder class. */ 612 613 typedef struct jpc_enc_s { 614 615 /* The image being encoded. */ 616 jas_image_t *image; 617 618 /* The output stream. */ 619 jas_stream_t *out; 620 621 /* The coding parameters. */ 622 jpc_enc_cp_t *cp; 623 624 /* The tile currently being processed. */ 625 jpc_enc_tile_t *curtile; 626 627 /* The code stream state. */ 628 jpc_cstate_t *cstate; 629 630 /* The number of bytes output so far. */ 631 uint_fast32_t len; 632 633 /* The number of bytes available for the main body of the code stream. */ 634 /* This is used for rate allocation purposes. */ 635 uint_fast32_t mainbodysize; 636 637 /* The marker segment currently being processed. */ 638 /* This member is a convenience for making cleanup easier. */ 639 jpc_ms_t *mrk; 640 641 /* The stream used to temporarily hold tile-part data. */ 642 jas_stream_t *tmpstream; 643 644 } jpc_enc_t; 645 646 #endif 647