Grok  10.0.3
grok.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2016-2022 Grok Image Compression Inc.
3  *
4  * This source code is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Affero General Public License, version 3,
6  * as published by the Free Software Foundation.
7  *
8  * This source code is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU Affero General Public License for more details.
12  *
13  * You should have received a copy of the GNU Affero General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  *
17  * This source code incorporates work covered by the BSD 2-clause license.
18  * Please see the LICENSE file in the root directory for details.
19  *
20  */
21 #pragma once
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #include "grk_config.h"
28 #include <stdint.h>
29 #include <stdio.h>
30 #include <stdbool.h>
31 #include <limits.h>
32 
33 #ifdef _WIN32
34 #define GRK_CALLCONV __stdcall
35 #ifdef GRK_STATIC
36 #define GRK_API
37 #else
38 #ifdef GRK_EXPORTS
39 #define GRK_API __declspec(dllexport)
40 #else
41 #define GRK_API __declspec(dllimport)
42 #endif
43 #endif
44 #else
45 #define GRK_CALLCONV
46 #ifdef GRK_STATIC
47 #define GRK_API __attribute__((visibility("hidden")))
48 #else
49 #define GRK_API __attribute__((visibility("default")))
50 #endif
51 #endif
52 
56 typedef enum _GRK_PROG_ORDER
57 {
59  GRK_LRCP = 0,
60  GRK_RLCP = 1,
61  GRK_RPCL = 2,
62  GRK_PCRL = 3,
63  GRK_CPRL = 4,
66 
70 typedef enum _GRK_COLOR_SPACE
71 {
80  GRK_CLRSPC_ICC = 9
82 
83 /* JPEG 2000 standard colour space enumeration */
85 {
91  GRK_ENUM_CLRSPC_PHOTO_YCC = 9, /* Kodak PhotoYCC */
92  GRK_ENUM_CLRSPC_CMY = 11, /* cyan, magenta, yellow */
93  GRK_ENUM_CLRSPC_CMYK = 12, /* cyan, magenta, yellow, black */
99  GRK_ENUM_CLRSPC_SYCC = 18, /* standard YCC */
102  GRK_ENUM_CLRSPC_ROMMRGB = 21, /* Reference Output Medium Metric RGB */
105  GRK_ENUM_CLRSPC_EYCC = 24, /* extended YCC */
107 
108 #define GRK_NUM_COMMENTS_SUPPORTED 256
109 #define GRK_NUM_ASOC_BOXES_SUPPORTED 256
110 #define GRK_MAX_COMMENT_LENGTH (UINT16_MAX - 2)
111 
118 typedef void (*grk_msg_callback)(const char* msg, void* client_data);
119 
125 typedef struct _grk_object
126 {
127  void* wrapper;
129 
134 typedef struct _grk_progression
135 {
139  uint32_t tileno;
141  uint32_t tx0;
142  uint32_t ty0;
143  uint32_t tx1;
144  uint32_t ty1;
146  uint16_t compS;
147  uint16_t compE;
148  uint8_t resS;
149  uint8_t resE;
150  uint64_t precS;
151  uint64_t precE;
152  uint16_t layS;
153  uint16_t layE;
154  uint16_t tpCompS;
155  uint16_t tpCompE;
156  uint8_t tpResS;
157  uint8_t tpResE;
158  uint64_t tpPrecE;
159  uint16_t tpLayE;
160  uint32_t tp_txS;
161  uint32_t tp_txE;
162  uint32_t tp_tyS;
163  uint32_t tp_tyE;
164  uint32_t dx;
165  uint32_t dy;
166  uint16_t comp_temp;
167  uint8_t res_temp;
168  uint64_t prec_temp;
169  uint16_t lay_temp;
170  uint32_t tx0_temp;
171  uint32_t ty0_temp;
173 
176 {
177  uint8_t dx;
178  uint8_t dy;
181 
183 typedef struct _grk_raw_cparameters
184 {
185  uint32_t width;
186  uint32_t height;
187  uint16_t numcomps;
188  uint8_t prec;
189  bool sgnd;
192 
199 {
203 
208 {
217  GRK_FMT_RAW, /* MSB / Big Endian */
219  GRK_FMT_RAWL, /* LSB / Little Endian */
222 
223 #define GRK_PATH_LEN 4096 /* Maximum allowed filename size */
224 #define GRK_MAX_LAYERS 100 /* Maximum number of quality layers */
225 
226 /*
227  * Note: range for number of decomposition levels is 0-32
228  * So, accordingly, range for number of resolutions is 1-33
229  */
230 #define GRK_J2K_MAX_DECOMP_LVLS \
231  32 /* Maximum number of decomposition levels allowed by standard \
232  */
233 #define GRK_J2K_MAXRLVLS \
234  (GRK_J2K_MAX_DECOMP_LVLS + 1) /* Maximum number of resolution levels allowed by standard*/
235 #define GRK_J2K_MAXBANDS \
236  (3 * GRK_J2K_MAXRLVLS - 2) /* Maximum number of sub-bands allowed by standard */
237 
247 typedef struct _grk_component_mapping_comp
248 {
249  uint16_t component_index;
250  uint8_t mapping_type;
251  uint8_t palette_column;
253 
257 typedef struct _grk_palette_data
258 {
259  int32_t* lut;
260  uint16_t num_entries;
262  uint8_t num_channels;
264  uint8_t* channel_prec;
266 
267 /***
268  * Channel Definition box structures and enums.
269  * When no Component mapping box is present, it is still possible to have
270  * a Channel defintion box, in which case channels are associated with components
271  * in the obvious way : channel `k` corresponds to component `k`.
272  * */
273 
274 /* channel type */
275 typedef enum _GRK_CHANNEL_TYPE
276 {
277 
282 
284 
285 /* channel association */
286 typedef enum _GRK_CHANNEL_ASSOC
287 {
288 
294 
296 
300 typedef struct _grk_channel_description
301 {
302  uint16_t channel;
303  uint16_t typ;
304  uint16_t asoc;
306 
310 typedef struct _grk_channel_definition
311 {
315 
319 typedef struct _grk_color
320 {
321  uint8_t* icc_profile_buf;
322  uint32_t icc_profile_len;
327 } grk_color;
328 
332 typedef struct _grk_asoc
333 {
334  uint32_t level; /* 0 for root level */
335  const char* label;
336  uint8_t* xml;
337  uint32_t xml_len;
338 } grk_asoc;
339 
343 typedef enum _grk_precision_mode
344 {
348 
352 typedef struct _grk_precision
353 {
354  uint8_t prec;
356 } grk_precision;
357 
361 typedef struct _grk_header_info
362 {
363  /******************************************
364  set by client only if decompressing to file
365  *******************************************/
367  bool forceRGB;
368  bool upsample;
370  uint32_t numPrecision;
373  /****************************************/
374 
375  /*****************************************
376  populated by library after reading header
377  ******************************************/
379  uint32_t cblockw_init;
381  uint32_t cblockh_init;
383  bool irreversible;
385  uint32_t mct;
388  uint16_t rsiz;
390  uint32_t numresolutions;
391  /*********************************************************
392  coding style can be specified in main header COD segment,
393  tile header COD segment, and tile component COC segment.
394  *********************************************************/
395  /* !!!! assume that coding style does not vary across tile components */
396  uint8_t csty;
397  /*******************************************************************
398  code block style is specified in main header COD segment, and can
399  be overridden in a tile header. !!! Assume that style does
400  not vary across tiles !!!
401  *******************************************************************/
402  uint8_t cblk_sty;
404  uint32_t prcw_init[GRK_J2K_MAXRLVLS];
406  uint32_t prch_init[GRK_J2K_MAXRLVLS];
408  uint32_t tx0;
410  uint32_t ty0;
412  uint32_t t_width;
414  uint32_t t_height;
416  uint32_t t_grid_width;
418  uint32_t t_grid_height;
420  uint16_t numlayers;
421  /*************************************
422  note: xml_data will remain valid
423  until codec is destroyed
424  ************************************/
425  uint8_t* xml_data;
426  size_t xml_data_len;
427  size_t num_comments;
431 
433  uint32_t num_asocs;
435 
436 typedef struct _grk_io_buf
437 {
438  uint8_t* data_;
439  size_t offset_;
440  size_t len_;
441  size_t allocLen_;
442  bool pooled_;
443  uint32_t index_;
444 } grk_io_buf;
445 
446 typedef struct _grk_io_init
447 {
448  uint32_t maxPooledRequests_;
449 
450 } grk_io_init;
451 
452 typedef bool (*grk_io_callback)(uint32_t threadId, grk_io_buf buffer, void* io_user_data);
453 typedef void (*grk_io_register_reclaim_callback)(grk_io_init io_init,
454  grk_io_callback reclaim_callback,
455  void* io_user_data, void* reclaim_user_data);
456 typedef bool (*grk_io_pixels_callback)(uint32_t threadId, grk_io_buf buffer, void* user_data);
457 
461 typedef struct _grk_stream_params
462 {
463  // file name
464  const char* file;
465 
466  // buffer and buffer length
467  uint8_t* buf;
468  size_t len;
470 
471 typedef enum _GRK_TILE_CACHE_STRATEGY
472 {
473  GRK_TILE_CACHE_NONE, /* no tile caching */
474  GRK_TILE_CACHE_IMAGE /* cache final tile image */
476 
480 typedef struct _grk_decompress_core_params
481 {
489  uint8_t reduce;
496  uint16_t max_layers;
498 
499  uint32_t randomAccessFlags_;
500 
505 
506 #define GRK_DECOMPRESS_COMPRESSION_LEVEL_DEFAULT (UINT_MAX)
507 
511 typedef enum _GRK_CODEC_FORMAT
512 {
514  GRK_CODEC_J2K = 0,
517 
521 typedef struct _grk_decompress_params
522 {
526  char infile[GRK_PATH_LEN];
528  char outfile[GRK_PATH_LEN];
534  float dw_x0;
536  float dw_x1;
538  float dw_y0;
540  float dw_y1;
542  uint16_t tileIndex;
545  uint32_t numPrecision;
546  /* force output colorspace to RGB */
547  bool force_rgb;
548  /* upsample components according to their dx/dy values */
549  bool upsample;
550  /* split output components to different files */
551  bool split_pnm;
552  /* serialize XML metadata to disk */
553  bool io_xml;
554  uint32_t compression;
555  /*****************************************************
556  compression "quality". Meaning of "quality" depends
557  on file format we are writing to
558  *****************************************************/
559  uint32_t compressionLevel;
561  bool verbose_;
562  int32_t deviceId;
563  uint32_t duration; /* in seconds */
565  uint32_t repeats;
566  uint32_t numThreads;
568 
572 typedef struct _grk_image_comp
573 {
575  uint32_t x0;
577  uint32_t y0;
579  uint32_t w;
581  uint32_t stride;
583  uint32_t h;
586  uint8_t dx;
589  uint8_t dy;
591  uint8_t prec;
592  /* signed */
593  bool sgnd;
596  /* component registration coordinates */
597  uint16_t Xcrg, Ycrg;
599  int32_t* data;
601 
602 /* Image meta data: colour, IPTC and XMP */
603 typedef struct _grk_image_meta
604 {
607  uint8_t* iptc_buf;
608  size_t iptc_len;
609  uint8_t* xmp_buf;
610  size_t xmp_len;
612 
613 typedef struct _grk_image
614 {
615  grk_object obj;
618  uint32_t x0;
621  uint32_t y0;
623  uint32_t x1;
625  uint32_t y1;
627  uint16_t numcomps;
636  bool forceRGB;
637  bool upsample;
639  uint32_t numPrecision;
643  uint32_t decompressWidth;
645  uint8_t decompressPrec;
648  uint32_t rowsPerStrip; // for storage to output format
649  uint32_t rowsPerTask; // for scheduling
650  uint64_t packedRowBytes;
653 } grk_image;
654 
655 /*************************************************
656 Structs to pass data between grok and plugin
657 ************************************************/
661 typedef struct _grk_plugin_pass
662 {
663  double distortionDecrease; /* distortion decrease up to and including this pass */
664  size_t rate; /* rate up to and including this pass */
665  size_t length; /* stream length for this pass */
667 
671 typedef struct _grk_plugin_code_block
672 {
673  /**************************
674  debug info
675  **************************/
676  uint32_t x0, y0, x1, y1;
677  unsigned int* contextStream;
678  /***************************/
679  uint32_t numPix;
680  uint8_t* compressedData;
682  uint8_t numBitPlanes;
683  size_t numPasses;
685  unsigned int sortedIndex;
687 
691 typedef struct _grk_plugin_precinct
692 {
693  uint64_t numBlocks;
696 
700 typedef struct _grk_plugin_band
701 {
702  uint8_t orientation;
703  uint64_t numPrecincts;
705  float stepsize;
707 
711 typedef struct _grk_plugin_resolution
712 {
713  size_t level;
714  size_t numBands;
717 
721 typedef struct grk_plugin_tile_component
722 {
726 
727 #define GRK_DECODE_HEADER (1 << 0)
728 #define GRK_DECODE_T2 (1 << 1)
729 #define GRK_DECODE_T1 (1 << 2)
730 #define GRK_DECODE_POST_T1 (1 << 3)
731 #define GRK_PLUGIN_DECODE_CLEAN (1 << 4)
732 #define GRK_DECODE_ALL \
733  (GRK_PLUGIN_DECODE_CLEAN | GRK_DECODE_HEADER | GRK_DECODE_T2 | GRK_DECODE_T1 | \
734  GRK_DECODE_POST_T1)
735 
739 typedef struct _grk_plugin_tile
740 {
745 
746 /* opaque codec object */
747 typedef grk_object grk_codec;
748 
752 GRK_API const char* GRK_CALLCONV grk_version(void);
753 
760 GRK_API bool GRK_CALLCONV grk_initialize(const char* pluginPath, uint32_t numthreads);
761 
766 
771 
772 /*
773  * Decrement ref count
774  *
775  */
777 
778 GRK_API void GRK_CALLCONV grk_set_msg_handlers(grk_msg_callback info_callback, void* info_user_data,
779  grk_msg_callback warn_callback, void* warn_user_data,
780  grk_msg_callback error_callback,
781  void* error_user_data);
782 
792 GRK_API grk_image* GRK_CALLCONV grk_image_new(uint16_t numcmpts, grk_image_comp* cmptparms,
793  GRK_COLOR_SPACE clrspc);
794 
796 
807 GRK_API bool GRK_CALLCONV grk_decompress_detect_format(const char* fileName, GRK_CODEC_FORMAT* fmt);
808 
820 GRK_API bool GRK_CALLCONV grk_decompress_buffer_detect_format(uint8_t* buffer, size_t len,
821  GRK_CODEC_FORMAT* fmt);
828 
838  grk_decompress_core_params* core_params);
839 
850  grk_header_info* header_info);
851 
861 
870 
884 GRK_API bool GRK_CALLCONV grk_decompress_set_window(grk_codec* codec, float start_x, float start_y,
885  float end_x, float end_y);
886 
896 
905 GRK_API bool GRK_CALLCONV grk_decompress_tile(grk_codec* codec, uint16_t tileIndex);
906 
907 /* COMPRESSION FUNCTIONS*/
908 
912 typedef struct _grk_cparameters
913 {
915  bool tile_size_on;
917  uint32_t tx0;
919  uint32_t ty0;
921  uint32_t t_width;
923  uint32_t t_height;
925  uint16_t numlayers;
930  double layer_rate[GRK_MAX_LAYERS];
932  bool allocationByQuality;
938  size_t num_comments;
940  uint8_t csty;
941  /* number of guard bits */
942  uint8_t numgbits;
948  uint32_t numpocs;
950  uint8_t numresolution;
952  uint32_t cblockw_init;
954  uint32_t cblockh_init;
956  uint8_t cblk_sty;
959  bool irreversible;
962  int32_t roi_compno;
964  uint32_t roi_shift;
965  /* number of precinct size specifications */
966  uint32_t res_spec;
968  uint32_t prcw_init[GRK_J2K_MAXRLVLS];
970  uint32_t prch_init[GRK_J2K_MAXRLVLS];
972  char infile[GRK_PATH_LEN];
974  char outfile[GRK_PATH_LEN];
976  uint32_t image_offset_x0;
978  uint32_t image_offset_y0;
980  uint8_t subsampling_dx;
982  uint8_t subsampling_dy;
992  uint32_t max_comp_size;
998  uint8_t mct;
1001  void* mct_data;
1008  uint64_t max_cs_size;
1011  uint16_t rsiz;
1012  uint16_t framerate;
1013 
1014  /* set to true if input file stores capture resolution */
1016  double capture_resolution_from_file[2];
1019  double capture_resolution[2];
1022  double display_resolution[2];
1024  bool apply_icc_;
1027  uint32_t numThreads;
1028  int32_t deviceId;
1029  uint32_t duration; /* seconds */
1031  uint32_t repeats;
1032  bool writePLT;
1033  bool writeTLM;
1034  bool verbose;
1035 } grk_cparameters;
1036 
1057 
1066  grk_cparameters* parameters, grk_image* p_image);
1067 
1077 
1086 GRK_API void GRK_CALLCONV grk_dump_codec(grk_codec* codec, uint32_t info_flag, FILE* output_stream);
1087 
1098 GRK_API bool GRK_CALLCONV grk_set_MCT(grk_cparameters* parameters, float* encodingMatrix,
1099  int32_t* dc_shift, uint32_t nbComp);
1101 #define GRK_MAX_SUPPORTED_IMAGE_PRECISION 16 /* Maximum supported precision in library */
1103 #define GRK_IMG_INFO 1 /* Basic image information provided to the user */
1104 #define GRK_J2K_MH_INFO 2 /* Codestream information based only on the main header */
1105 #define GRK_J2K_TH_INFO 4 /* Tile information based on the current tile header */
1106 #define GRK_J2K_TCH_INFO 8
1107 #define GRK_J2K_MH_IND 16
1108 #define GRK_J2K_TH_IND 32
1109 #define GRK_JP2_INFO 128
1110 #define GRK_JP2_IND 256
1112 #define GRK_CBLKSTY_LAZY 0x001
1113 #define GRK_CBLKSTY_RESET 0x002
1114 #define GRK_CBLKSTY_TERMALL 0x004
1115 #define GRK_CBLKSTY_VSC 0x008
1116 #define GRK_CBLKSTY_PTERM 0x010
1117 #define GRK_CBLKSTY_SEGSYM 0x020
1118 #define GRK_CBLKSTY_HT 0x040
1119 #define GRK_CBLKSTY_HT_MIXED 0x080
1120 #define GRK_CBLKSTY_HT_PHLD 0x100
1121 #define GRK_JPH_RSIZ_FLAG 0x4000
1123 /*****************************************************************************
1124  * JPEG 2000 Profiles, see Table A.10 from 15444-1 (updated in various AMDs)
1125  *
1126  * These values help choose the RSIZ value for the JPEG 2000 code stream.
1127  * The RSIZ value forces various compressing options, as detailed in Table A.10.
1128  * If GRK_PROFILE_PART2 is chosen, it must be combined with one or more extensions
1129  * described below.
1130  *
1131  * Example: rsiz = GRK_PROFILE_PART2 | GRK_EXTENSION_MCT;
1132  *
1133  * For broadcast profiles, the GRK_PROFILE_X value has to be combined with the target
1134  * level (3-0 LSB, value between 0 and 11):
1135  * Example: rsiz = GRK_PROFILE_BC_MULTI | 0x0005; //level equals 5
1136  *
1137  * For IMF profiles, the GRK_PROFILE_X value has to be combined with the target main-level
1138  * (3-0 LSB, value between 0 and 11) and sub-level (7-4 LSB, value between 0 and 9):
1139  * Example: rsiz = GRK_PROFILE_IMF_2K | 0x0040 | 0x0005; // main-level equals 5 and sub-level
1140  * equals 4
1141  *
1142  * */
1143 #define GRK_PROFILE_NONE 0x0000
1144 #define GRK_PROFILE_0 0x0001
1145 #define GRK_PROFILE_1 0x0002
1146 #define GRK_PROFILE_CINEMA_2K 0x0003
1147 #define GRK_PROFILE_CINEMA_4K 0x0004
1148 #define GRK_PROFILE_CINEMA_S2K 0x0005
1149 #define GRK_PROFILE_CINEMA_S4K 0x0006
1150 #define GRK_PROFILE_CINEMA_LTS \
1151  0x0007
1152 #define GRK_PROFILE_BC_SINGLE 0x0100
1153 #define GRK_PROFILE_BC_MULTI 0x0200
1154 #define GRK_PROFILE_BC_MULTI_R \
1155  0x0300
1156 #define GRK_PROFILE_BC_MASK 0x030F
1157 #define GRK_PROFILE_IMF_2K 0x0400
1158 #define GRK_PROFILE_IMF_4K 0x0500
1159 #define GRK_PROFILE_IMF_8K 0x0600
1160 #define GRK_PROFILE_IMF_2K_R \
1161  0x0700
1162 #define GRK_PROFILE_IMF_4K_R \
1163  0x0800
1164 #define GRK_PROFILE_IMF_8K_R \
1165  0x0900
1166 #define GRK_PROFILE_MASK 0x0FFF
1167 #define GRK_PROFILE_PART2 0x8000
1168 #define GRK_PROFILE_PART2_EXTENSIONS_MASK 0x3FFF // Mask for Part-2 extension bits
1169 
1173 #define GRK_EXTENSION_NONE 0x0000
1174 #define GRK_EXTENSION_MCT 0x0100
1175 #define GRK_IS_PART2(v) ((v)&GRK_PROFILE_PART2)
1177 #define GRK_IS_CINEMA(v) (((v) >= GRK_PROFILE_CINEMA_2K) && ((v) <= GRK_PROFILE_CINEMA_S4K))
1178 #define GRK_IS_STORAGE(v) ((v) == GRK_PROFILE_CINEMA_LTS)
1179 
1180 /*
1181  *
1182  * *********************************************
1183  * Broadcast level (3-0 LSB) (15444-1 AMD4,AMD8)
1184  * *********************************************
1185  *
1186  * indicates maximum bit rate and sample rate for a code stream
1187  *
1188  * Note: Mbit/s == 10^6 bits/s; Msamples/s == 10^6 samples/s
1189  *
1190  * 0: no maximum rate
1191  * 1: 200 Mbits/s, 65 Msamples/s
1192  * 2: 200 Mbits/s, 130 Msamples/s
1193  * 3: 200 Mbits/s, 195 Msamples/s
1194  * 4: 400 Mbits/s, 260 Msamples/s
1195  * 5: 800Mbits/s, 520 Msamples/s
1196  * >= 6: 2^(level-6) * 1600 Mbits/s, 2^(level-6) * 1200 Msamples/s
1197  *
1198  * Note: level cannot be greater than 11
1199  *
1200  * ****************
1201  * Broadcast tiling
1202  * ****************
1203  *
1204  * Either single-tile or multi-tile. Multi-tile only permits
1205  * 1 or 4 tiles per frame, where multiple tiles have identical
1206  * sizes, and are configured in either 2x2 or 1x4 layout.
1207  *
1208  *************************************************************
1209  *
1210  * ***************************************
1211  * IMF main-level (3-0) LSB (15444-1 AMD8)
1212  * ***************************************
1213  *
1214  * main-level indicates maximum number of samples per second,
1215  * as listed above.
1216  *
1217  *
1218  * **************************************
1219  * IMF sub-level (7-4) LSB (15444-1 AMD8)
1220  * **************************************
1221  *
1222  * sub-level indicates maximum bit rate for a code stream:
1223  *
1224  * 0: no maximum rate
1225  * >0: 2^sub-level * 100 Mbits/second
1226  *
1227  * Note: sub-level cannot be greater than 9, and cannot be larger
1228  * then maximum of (main-level -2) and 1.
1229  *
1230  */
1232 #define GRK_GET_IMF_OR_BROADCAST_PROFILE(v) \
1233  ((v)&0x0f00)
1235 #define GRK_LEVEL_MAX 11U
1236 #define GRK_GET_LEVEL(v) ((v)&0xf)
1238 /******* BROADCAST **********************************************************/
1240 #define GRK_IS_BROADCAST(v) \
1241  (((v) >= GRK_PROFILE_BC_SINGLE) && ((v) <= (GRK_PROFILE_BC_MULTI_R | 0x000b)) && \
1242  (((v)&0xf) <= 0xb))
1243 
1244 /* Maximum component sampling Rate (Mbits/sec) per level */
1245 #define GRK_BROADCAST_LEVEL_1_MBITSSEC 200U
1246 #define GRK_BROADCAST_LEVEL_2_MBITSSEC 200U
1247 #define GRK_BROADCAST_LEVEL_3_MBITSSEC 200U
1248 #define GRK_BROADCAST_LEVEL_4_MBITSSEC 400U
1249 #define GRK_BROADCAST_LEVEL_5_MBITSSEC 800U
1250 #define GRK_BROADCAST_LEVEL_6_MBITSSEC 1600U
1251 #define GRK_BROADCAST_LEVEL_7_MBITSSEC 3200U
1252 #define GRK_BROADCAST_LEVEL_8_MBITSSEC 6400U
1253 #define GRK_BROADCAST_LEVEL_9_MBITSSEC 12800U
1254 #define GRK_BROADCAST_LEVEL_10_MBITSSEC 25600U
1255 #define GRK_BROADCAST_LEVEL_11_MBITSSEC 51200U
1257 #define GRK_BROADCAST_LEVEL_1_MSAMPLESSEC 64U
1258 #define GRK_BROADCAST_LEVEL_2_MSAMPLESSEC 130U
1259 #define GRK_BROADCAST_LEVEL_3_MSAMPLESSEC 195U
1260 #define GRK_BROADCAST_LEVEL_4_MSAMPLESSEC 260U
1261 #define GRK_BROADCAST_LEVEL_5_MSAMPLESSEC 520U
1262 #define GRK_BROADCAST_LEVEL_6_MSAMPLESSEC 1200U
1263 #define GRK_BROADCAST_LEVEL_7_MSAMPLESSEC 2400U
1264 #define GRK_BROADCAST_LEVEL_8_MSAMPLESSEC 4800U
1265 #define GRK_BROADCAST_LEVEL_9_MSAMPLESSEC 9600U
1266 #define GRK_BROADCAST_LEVEL_10_MSAMPLESSEC 19200U
1267 #define GRK_BROADCAST_LEVEL_11_MSAMPLESSEC 38400U
1269 /********IMF *****************************************************************/
1271 #define GRK_IS_IMF(v) \
1272  (((v) >= GRK_PROFILE_IMF_2K) && ((v) <= (GRK_PROFILE_IMF_8K_R | 0x009b)) && \
1273  (((v)&0xf) <= 0xb) && (((v)&0xf0) <= 0x90))
1274 
1275 /* Maximum component sampling rate (MSamples/sec) per main level */
1276 #define GRK_IMF_MAINLEVEL_1_MSAMPLESSEC 65U
1277 #define GRK_IMF_MAINLEVEL_2_MSAMPLESSEC 130U
1278 #define GRK_IMF_MAINLEVEL_3_MSAMPLESSEC 195U
1279 #define GRK_IMF_MAINLEVEL_4_MSAMPLESSEC 260U
1280 #define GRK_IMF_MAINLEVEL_5_MSAMPLESSEC 520U
1281 #define GRK_IMF_MAINLEVEL_6_MSAMPLESSEC 1200U
1282 #define GRK_IMF_MAINLEVEL_7_MSAMPLESSEC 2400U
1283 #define GRK_IMF_MAINLEVEL_8_MSAMPLESSEC 4800U
1284 #define GRK_IMF_MAINLEVEL_9_MSAMPLESSEC 9600U
1285 #define GRK_IMF_MAINLEVEL_10_MSAMPLESSEC 19200U
1286 #define GRK_IMF_MAINLEVEL_11_MSAMPLESSEC 38400U
1288 #define GRK_IMF_SUBLEVEL_MAX 9U
1289 #define GRK_GET_IMF_SUBLEVEL(v) (((v) >> 4) & 0xf)
1292 #define GRK_IMF_SUBLEVEL_1_MBITSSEC 200U
1293 #define GRK_IMF_SUBLEVEL_2_MBITSSEC 400U
1294 #define GRK_IMF_SUBLEVEL_3_MBITSSEC 800U
1295 #define GRK_IMF_SUBLEVEL_4_MBITSSEC 1600U
1296 #define GRK_IMF_SUBLEVEL_5_MBITSSEC 3200U
1297 #define GRK_IMF_SUBLEVEL_6_MBITSSEC 6400U
1298 #define GRK_IMF_SUBLEVEL_7_MBITSSEC 12800U
1299 #define GRK_IMF_SUBLEVEL_8_MBITSSEC 25600U
1300 #define GRK_IMF_SUBLEVEL_9_MBITSSEC 51200U
1301 /**********************************************************************************/
1302 
1306 #define GRK_CINEMA_24_CS 1302083U
1307 #define GRK_CINEMA_48_CS 651041U
1308 #define GRK_CINEMA_24_COMP 1041666U
1309 #define GRK_CINEMA_48_COMP 520833U
1311 /*
1312  *
1313  * CIE Lab #defines
1314  */
1315 #define GRK_CUSTOM_CIELAB_SPACE 0x0
1316 #define GRK_DEFAULT_CIELAB_SPACE 0x44454600 /* 'DEF' */
1317 #define GRK_CIE_DAY ((((uint32_t)'C') << 24) + (((uint32_t)'T') << 16))
1318 #define GRK_CIE_D50 ((uint32_t)0x00443530)
1319 #define GRK_CIE_D65 ((uint32_t)0x00443635)
1320 #define GRK_CIE_D75 ((uint32_t)0x00443735)
1321 #define GRK_CIE_SA ((uint32_t)0x00005341)
1322 #define GRK_CIE_SC ((uint32_t)0x00005343)
1323 #define GRK_CIE_F2 ((uint32_t)0x00004632)
1324 #define GRK_CIE_F7 ((uint32_t)0x00004637)
1325 #define GRK_CIE_F11 ((uint32_t)0x00463131)
1326 
1330 #define GRK_RANDOM_ACCESS_PLT 1 /* use PLT marker if present */
1331 #define GRK_RANDOM_ACCESS_TLM 2 /* use TLM marker if present */
1332 #define GRK_RANDOM_ACCESS_PLM 4 /* use PLM marker if present */
1333 
1334 /*************************************************************************************
1335  Plugin Interface
1336  *************************************************************************************/
1337 
1338 /*
1339  Plugin management
1340  */
1342 typedef struct _grk_plugin_load_info
1344  const char* pluginPath;
1346 
1353 
1358 
1359 /* No debug is done on plugin. Production setting. */
1360 #define GRK_PLUGIN_STATE_NO_DEBUG 0x0
1361 
1362 /*
1363  For compress debugging, the plugin first performs a T1 compress.
1364  Then:
1365  1. perform host DWT on plugin MCT data, and write to host image
1366  This way, both plugin and host start from same point
1367  (assume MCT is equivalent for both host and plugin)
1368  2. map plugin DWT data, compare with host DWT, and then write to plugin image
1369  At this point in the code, the plugin image holds plugin DWT data. And if no warnings are
1370  triggered, then we can safely say that host and plugin DWT data are identical.
1371  3. Perform host compress, skipping MCT and DWT (they have already been performed)
1372  4. during host compress, each context that is formed is compared against context stream from plugin
1373  5. rate control - synch with plugin code stream, and compare
1374  6. T2 and store to disk
1375  */
1377 #define GRK_PLUGIN_STATE_DEBUG 0x1
1378 #define GRK_PLUGIN_STATE_PRE_TR1 0x2
1379 #define GRK_PLUGIN_STATE_DWT_QUANTIZATION 0x4
1380 #define GRK_PLUGIN_STATE_MCT_ONLY 0x8
1381 
1386 
1387 /*
1388  Plugin compressing
1389  */
1390 typedef struct _grk_plugin_init_info
1392  int32_t deviceId;
1393  bool verbose;
1395 
1403  const char* input_file_name;
1405  const char* output_file_name;
1410  unsigned int error_code;
1415 
1422 GRK_API int32_t GRK_CALLCONV grk_plugin_compress(grk_cparameters* compress_parameters,
1424 
1436 GRK_API int32_t GRK_CALLCONV grk_plugin_batch_compress(const char* input_dir,
1437  const char* output_dir,
1438  grk_cparameters* compress_parameters,
1440 
1445 
1450 
1451 /*
1452  Plugin decompression
1453  */
1455 typedef int (*GROK_INIT_DECOMPRESSORS)(grk_header_info* header_info, grk_image* image);
1459  size_t deviceId;
1461  const char* input_file_name;
1462  const char* output_file_name;
1463  /* input file format 0: J2K, 1: JP2 */
1465  /* output file format 0: PGX, 1: PxM, 2: BMP etc */
1473  unsigned int error_code;
1475  uint32_t full_image_x0;
1476  uint32_t full_image_y0;
1477  void* user_data;
1481 
1490 
1502  const char* input_dir, const char* output_dir, grk_decompress_parameters* decompress_parameters,
1504 
1509 
1514 
1515 #ifdef __cplusplus
1516 }
1517 #endif
struct _grk_plugin_init_info grk_plugin_init_info
enum _GRK_TILE_CACHE_STRATEGY GRK_TILE_CACHE_STRATEGY
_GRK_SUPPORTED_FILE_FMT
All supported file formats.
Definition: grok.h:208
@ GRK_FMT_BMP
Definition: grok.h:215
@ GRK_FMT_JP2
Definition: grok.h:211
@ GRK_FMT_J2K
Definition: grok.h:210
@ GRK_FMT_PNG
Definition: grok.h:218
@ GRK_FMT_RAWL
Definition: grok.h:219
@ GRK_FMT_UNK
Definition: grok.h:209
@ GRK_FMT_TIF
Definition: grok.h:216
@ GRK_FMT_JPG
Definition: grok.h:220
@ GRK_FMT_PXM
Definition: grok.h:212
@ GRK_FMT_RAW
Definition: grok.h:217
@ GRK_FMT_PAM
Definition: grok.h:214
@ GRK_FMT_PGX
Definition: grok.h:213
struct _grk_cparameters grk_cparameters
Compress parameters.
struct _grk_progression grk_progression
Progression order change.
enum _grk_precision_mode grk_precision_mode
Precision mode.
struct _grk_image grk_image
void(* grk_io_register_reclaim_callback)(grk_io_init io_init, grk_io_callback reclaim_callback, void *io_user_data, void *reclaim_user_data)
Definition: grok.h:452
GRK_API bool GRK_CALLCONV grk_set_MCT(grk_cparameters *parameters, float *encodingMatrix, int32_t *dc_shift, uint32_t nbComp)
Set the MCT matrix to use.
Definition: grok.cpp:401
GRK_API void GRK_CALLCONV grk_plugin_stop_batch_compress(void)
Stop batch compress.
Definition: grok.cpp:793
GRK_API grk_image *GRK_CALLCONV grk_image_new(uint16_t numcmpts, grk_image_comp *cmptparms, GRK_COLOR_SPACE clrspc)
Create image.
Definition: grok.cpp:211
GRK_API void GRK_CALLCONV grk_plugin_stop_batch_decompress(void)
Stop batch decompress.
Definition: grok.cpp:889
struct _grk_channel_description grk_channel_description
Channel definition: channel index, type, association.
#define GRK_NUM_COMMENTS_SUPPORTED
Definition: grok.h:108
void(* grk_msg_callback)(const char *msg, void *client_data)
Logging callback.
Definition: grok.h:118
enum _GRK_CHANNEL_TYPE GRK_CHANNEL_TYPE
bool(* grk_io_pixels_callback)(uint32_t threadId, grk_io_buf buffer, void *user_data)
Definition: grok.h:455
struct _grk_stream_params grk_stream_params
JPEG 2000 stream parameters - either file or buffer.
GRK_API void GRK_CALLCONV grk_plugin_cleanup(void)
Release plugin resources.
Definition: grok.cpp:699
GRK_API bool GRK_CALLCONV grk_plugin_load(grk_plugin_load_info info)
Load plugin.
Definition: grok.cpp:657
GRK_API bool GRK_CALLCONV grk_decompress_detect_format(const char *fileName, GRK_CODEC_FORMAT *fmt)
Detect jpeg 2000 format from file Format is either GRK_FMT_J2K or GRK_FMT_JP2.
Definition: grok.cpp:252
enum _GRK_CODEC_FORMAT GRK_CODEC_FORMAT
Supported JPEG 2000 formats.
enum _GRK_ENUM_COLOUR_SPACE GRK_ENUM_COLOUR_SPACE
GRK_API void GRK_CALLCONV grk_set_msg_handlers(grk_msg_callback info_callback, void *info_user_data, grk_msg_callback warn_callback, void *warn_user_data, grk_msg_callback error_callback, void *error_user_data)
Definition: grok.cpp:151
GRK_API uint32_t GRK_CALLCONV grk_plugin_get_debug_state()
Get debug state of plugin.
Definition: grok.cpp:684
struct _grk_precision grk_precision
Precision.
struct _grk_plugin_decompress_callback_info grk_plugin_decompress_callback_info
GRK_API void GRK_CALLCONV grk_decompress_set_default_params(grk_decompress_core_params *parameters)
Initialize decompress parameters with default values.
Definition: grok.cpp:306
GRK_API int32_t GRK_CALLCONV grk_plugin_batch_decompress(void)
Initiate batch decompress.
Definition: grok.cpp:875
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Progression order.
struct _grk_object grk_object
Grok ref-counted object.
struct _grk_raw_cparameters grk_raw_cparameters
RAW image compress parameters.
struct _grk_plugin_load_info grk_plugin_load_info
GRK_API int32_t GRK_CALLCONV grk_plugin_compress(grk_cparameters *compress_parameters, GRK_PLUGIN_COMPRESS_USER_CALLBACK callback)
Compress with plugin.
Definition: grok.cpp:740
_GRK_CHANNEL_ASSOC
Definition: grok.h:286
@ GRK_CHANNEL_ASSOC_COLOUR_1
Definition: grok.h:289
@ GRK_CHANNEL_ASSOC_COLOUR_2
Definition: grok.h:290
@ GRK_CHANNEL_ASSOC_COLOUR_3
Definition: grok.h:291
@ GRK_CHANNEL_ASSOC_WHOLE_IMAGE
Definition: grok.h:288
@ GRK_CHANNEL_ASSOC_UNASSOCIATED
Definition: grok.h:292
enum _GRK_RATE_CONTROL_ALGORITHM GRK_RATE_CONTROL_ALGORITHM
Rate control algorithms GRK_RATE_CONTROL_BISECT: bisect with all truncation points GRK_RATE_CONTROL_P...
struct _grk_decompress_core_params grk_decompress_core_params
Core decompression parameters.
struct _grk_image_meta grk_image_meta
struct _grk_asoc grk_asoc
Association box info.
grk_object grk_codec
Definition: grok.h:746
enum _GRK_SUPPORTED_FILE_FMT GRK_SUPPORTED_FILE_FMT
All supported file formats.
GRK_API grk_codec *GRK_CALLCONV grk_compress_init(grk_stream_params *stream_params, grk_cparameters *parameters, grk_image *p_image)
Set up the compressor parameters using the current image and user parameters.
Definition: grok.cpp:499
#define GRK_J2K_MAXRLVLS
Definition: grok.h:232
struct _grk_palette_data grk_palette_data
Palette data.
GRK_API bool GRK_CALLCONV grk_compress(grk_codec *codec, grk_plugin_tile *tile)
Compress an image into a JPEG 2000 code stream using plugin.
Definition: grok.cpp:563
#define GRK_API
Definition: grok.h:49
GRK_API bool GRK_CALLCONV grk_decompress_read_header(grk_codec *codec, grk_header_info *header_info)
Decompress JPEG 2000 header.
Definition: grok.cpp:341
struct _grk_component_mapping_comp grk_component_mapping_comp
Note: "component" refers to an image component as decompressed from the code stream,...
GRK_API const char *GRK_CALLCONV grk_version(void)
Library version.
Definition: grok.cpp:206
GRK_API bool GRK_CALLCONV grk_decompress_buffer_detect_format(uint8_t *buffer, size_t len, GRK_CODEC_FORMAT *fmt)
Detect jpeg 2000 format from buffer Format is either GRK_FMT_J2K or GRK_FMT_JP2.
Definition: grok.cpp:226
struct _grk_image_comp grk_image_comp
Image component.
struct _grk_raw_comp_cparameters grk_raw_comp_cparameters
RAW component compress parameters.
GRK_API void GRK_CALLCONV grk_deinitialize()
De-initialize library.
Definition: grok.cpp:127
struct grk_plugin_tile_component grk_plugin_tile_component
Plugin tile component.
GRK_API int32_t GRK_CALLCONV grk_plugin_batch_compress(const char *input_dir, const char *output_dir, grk_cparameters *compress_parameters, GRK_PLUGIN_COMPRESS_USER_CALLBACK callback)
Batch compress with plugin.
Definition: grok.cpp:756
GRK_API void GRK_CALLCONV grk_object_unref(grk_object *obj)
Definition: grok.cpp:142
#define GRK_MAX_LAYERS
Definition: grok.h:224
GRK_API void GRK_CALLCONV grk_compress_set_default_params(grk_cparameters *parameters)
Set compressing parameters to default values:
Definition: grok.cpp:470
struct _grk_plugin_precinct grk_plugin_precinct
Plugin precinct.
GRK_API grk_codec *GRK_CALLCONV grk_decompress_init(grk_stream_params *stream_params, grk_decompress_core_params *core_params)
Initialize decompressor.
Definition: grok.cpp:316
struct grk_plugin_compress_user_callback_info grk_plugin_compress_user_callback_info
_GRK_COLOR_SPACE
Supported color spaces.
Definition: grok.h:71
@ GRK_CLRSPC_SRGB
sRGB
Definition: grok.h:73
@ GRK_CLRSPC_EYCC
extended YCC
Definition: grok.h:76
@ GRK_CLRSPC_UNKNOWN
unknown
Definition: grok.h:72
@ GRK_CLRSPC_SYCC
standard YCC (YUV)
Definition: grok.h:75
@ GRK_CLRSPC_DEFAULT_CIE
default CIE LAB
Definition: grok.h:78
@ GRK_CLRSPC_ICC
ICC profile.
Definition: grok.h:80
@ GRK_CLRSPC_CMYK
CMYK.
Definition: grok.h:77
@ GRK_CLRSPC_GRAY
grayscale
Definition: grok.h:74
@ GRK_CLRSPC_CUSTOM_CIE
custom CIE LAB
Definition: grok.h:79
struct _grk_io_buf grk_io_buf
_grk_precision_mode
Precision mode.
Definition: grok.h:343
@ GRK_PREC_MODE_SCALE
Definition: grok.h:345
@ GRK_PREC_MODE_CLIP
Definition: grok.h:344
bool(* GRK_PLUGIN_COMPRESS_USER_CALLBACK)(grk_plugin_compress_user_callback_info *info)
Definition: grok.h:1413
GRK_API bool GRK_CALLCONV grk_plugin_is_batch_complete(void)
Check if batch job is complete.
Definition: grok.cpp:778
enum _GRK_COLOR_SPACE GRK_COLOR_SPACE
Supported color spaces.
#define GRK_PATH_LEN
Definition: grok.h:223
GRK_API bool GRK_CALLCONV grk_decompress_set_window(grk_codec *codec, float start_x, float start_y, float end_x, float end_y)
Set the given area to be decompressed.
Definition: grok.cpp:355
GRK_API int32_t GRK_CALLCONV grk_plugin_decompress(grk_decompress_parameters *decompress_parameters, grk_plugin_decompress_callback callback)
Decompress with plugin.
Definition: grok.cpp:840
struct _grk_io_init grk_io_init
GRK_API void GRK_CALLCONV grk_dump_codec(grk_codec *codec, uint32_t info_flag, FILE *output_stream)
Dump codec information to file.
Definition: grok.cpp:390
_GRK_ENUM_COLOUR_SPACE
Definition: grok.h:85
@ GRK_ENUM_CLRSPC_ESRGB
Definition: grok.h:101
@ GRK_ENUM_CLRSPC_CMY
Definition: grok.h:92
@ GRK_ENUM_CLRSPC_EYCC
Definition: grok.h:105
@ GRK_ENUM_CLRSPC_CIEJAB
Definition: grok.h:100
@ GRK_ENUM_CLRSPC_GRAY
Definition: grok.h:98
@ GRK_ENUM_CLRSPC_CIE
Definition: grok.h:95
@ GRK_ENUM_CLRSPC_UNKNOWN
Definition: grok.h:86
@ GRK_ENUM_CLRSPC_YCBCR3
Definition: grok.h:90
@ GRK_ENUM_CLRSPC_ROMMRGB
Definition: grok.h:102
@ GRK_ENUM_CLRSPC_YPBPR60
Definition: grok.h:103
@ GRK_ENUM_CLRSPC_SRGB
Definition: grok.h:97
@ GRK_ENUM_CLRSPC_BILEVEL2
Definition: grok.h:96
@ GRK_ENUM_CLRSPC_SYCC
Definition: grok.h:99
@ GRK_ENUM_CLRSPC_PHOTO_YCC
Definition: grok.h:91
@ GRK_ENUM_CLRSPC_YCBCR1
Definition: grok.h:88
@ GRK_ENUM_CLRSPC_CMYK
Definition: grok.h:93
@ GRK_ENUM_CLRSPC_YCCK
Definition: grok.h:94
@ GRK_ENUM_CLRSPC_YPBPR50
Definition: grok.h:104
@ GRK_ENUM_CLRSPC_BILEVEL1
Definition: grok.h:87
@ GRK_ENUM_CLRSPC_YCBCR2
Definition: grok.h:89
GRK_API grk_image *GRK_CALLCONV grk_decompress_get_composited_image(grk_codec *codec)
Get decompressed composite image.
Definition: grok.cpp:440
struct _grk_color grk_color
ICC profile, palette, channel definition.
GRK_API int32_t GRK_CALLCONV grk_plugin_init_batch_decompress(const char *input_dir, const char *output_dir, grk_decompress_parameters *decompress_parameters, grk_plugin_decompress_callback callback)
Initialize batch decompress.
Definition: grok.cpp:857
struct _grk_decompress_params grk_decompress_parameters
Decompression parameters.
_GRK_CHANNEL_TYPE
Definition: grok.h:275
@ GRK_CHANNEL_TYPE_OPACITY
Definition: grok.h:278
@ GRK_CHANNEL_TYPE_PREMULTIPLIED_OPACITY
Definition: grok.h:279
@ GRK_CHANNEL_TYPE_COLOUR
Definition: grok.h:277
@ GRK_CHANNEL_TYPE_UNSPECIFIED
Definition: grok.h:280
_GRK_RATE_CONTROL_ALGORITHM
Rate control algorithms GRK_RATE_CONTROL_BISECT: bisect with all truncation points GRK_RATE_CONTROL_P...
Definition: grok.h:199
@ GRK_RATE_CONTROL_PCRD_OPT
Definition: grok.h:201
@ GRK_RATE_CONTROL_BISECT
Definition: grok.h:200
GRK_API bool GRK_CALLCONV grk_decompress_tile(grk_codec *codec, uint16_t tileIndex)
Decompress a specific tile.
Definition: grok.cpp:379
struct _grk_channel_definition grk_channel_definition
Channel definitions and number of definitions.
int(* GROK_INIT_DECOMPRESSORS)(grk_header_info *header_info, grk_image *image)
Definition: grok.h:1454
struct _grk_plugin_band grk_plugin_band
Plugin band.
_GRK_CODEC_FORMAT
Supported JPEG 2000 formats.
Definition: grok.h:511
@ GRK_CODEC_J2K
JPEG 2000 code stream : read/write.
Definition: grok.h:513
@ GRK_CODEC_JP2
JP2 file format : read/write.
Definition: grok.h:514
@ GRK_CODEC_UNK
place-holder
Definition: grok.h:512
struct _grk_plugin_tile grk_plugin_tile
Plugin tile.
#define GRK_CALLCONV
Definition: grok.h:45
GRK_API grk_image_meta *GRK_CALLCONV grk_image_meta_new(void)
Definition: grok.cpp:217
GRK_API grk_image *GRK_CALLCONV grk_decompress_get_tile_image(grk_codec *codec, uint16_t tileIndex)
Get decompressed tile image.
Definition: grok.cpp:430
#define GRK_NUM_ASOC_BOXES_SUPPORTED
Definition: grok.h:109
_GRK_PROG_ORDER
Progression order.
Definition: grok.h:57
@ GRK_RPCL
resolution-precinct-component-layer order
Definition: grok.h:61
@ GRK_CPRL
component-precinct-resolution-layer order
Definition: grok.h:63
@ GRK_RLCP
resolution-layer-component-precinct order
Definition: grok.h:60
@ GRK_PROG_UNKNOWN
place-holder
Definition: grok.h:58
@ GRK_LRCP
layer-resolution-component-precinct order
Definition: grok.h:59
@ GRK_NUM_PROGRESSION_ORDERS
Definition: grok.h:64
@ GRK_PCRL
precinct-component-resolution-layer order
Definition: grok.h:62
struct _grk_plugin_pass grk_plugin_pass
Plugin pass.
enum _GRK_CHANNEL_ASSOC GRK_CHANNEL_ASSOC
bool(* grk_io_callback)(uint32_t threadId, grk_io_buf buffer, void *io_user_data)
Definition: grok.h:451
struct _grk_header_info grk_header_info
Header info.
int32_t(* grk_plugin_decompress_callback)(grk_plugin_decompress_callback_info *info)
Definition: grok.h:1479
_GRK_TILE_CACHE_STRATEGY
Definition: grok.h:471
@ GRK_TILE_CACHE_IMAGE
Definition: grok.h:473
@ GRK_TILE_CACHE_NONE
Definition: grok.h:472
GRK_API bool GRK_CALLCONV grk_initialize(const char *pluginPath, uint32_t numthreads)
Initialize library.
Definition: grok.cpp:114
struct _grk_plugin_resolution grk_plugin_resolution
Plugin resolution.
struct _grk_plugin_code_block grk_plugin_code_block
Plugin code block.
GRK_API bool GRK_CALLCONV grk_plugin_init(grk_plugin_init_info initInfo)
Initialize plugin.
Definition: grok.cpp:704
GRK_API grk_object *GRK_CALLCONV grk_object_ref(grk_object *obj)
Increment ref count.
Definition: grok.cpp:133
GRK_API bool GRK_CALLCONV grk_decompress(grk_codec *codec, grk_plugin_tile *tile)
Decompress image from a JPEG 2000 code stream.
Definition: grok.cpp:367
Association box info.
Definition: grok.h:332
const char * label
Definition: grok.h:334
uint8_t * xml
Definition: grok.h:335
uint32_t level
Definition: grok.h:333
uint32_t xml_len
Definition: grok.h:336
Channel definitions and number of definitions.
Definition: grok.h:310
uint16_t num_channel_descriptions
Definition: grok.h:312
grk_channel_description * descriptions
Definition: grok.h:311
Channel definition: channel index, type, association.
Definition: grok.h:300
uint16_t typ
Definition: grok.h:302
uint16_t asoc
Definition: grok.h:303
uint16_t channel
Definition: grok.h:301
ICC profile, palette, channel definition.
Definition: grok.h:319
grk_channel_definition * channel_definition
Definition: grok.h:323
char * icc_profile_name
Definition: grok.h:322
uint32_t icc_profile_len
Definition: grok.h:321
uint8_t * icc_profile_buf
Definition: grok.h:320
grk_palette_data * palette
Definition: grok.h:324
bool has_colour_specification_box
Definition: grok.h:325
Note: "component" refers to an image component as decompressed from the code stream,...
Definition: grok.h:247
uint8_t palette_column
Definition: grok.h:250
uint8_t mapping_type
Definition: grok.h:249
uint16_t component_index
Definition: grok.h:248
Compress parameters.
Definition: grok.h:912
uint32_t cblockw_init
initial code block width (default to 64)
Definition: grok.h:951
uint8_t numgbits
Definition: grok.h:941
char outfile[GRK_PATH_LEN]
output file name
Definition: grok.h:973
bool allocationByRateDistoration
rate control allocation by rate/distortion curve
Definition: grok.h:926
GRK_PROG_ORDER prog_order
progression order (default is LRCP)
Definition: grok.h:943
uint16_t comment_len[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:935
uint32_t repeats
Definition: grok.h:1030
uint32_t numThreads
Definition: grok.h:1026
bool verbose
Definition: grok.h:1033
uint32_t image_offset_x0
subimage compressing: origin image offset in x direction
Definition: grok.h:975
uint64_t max_cs_size
Maximum size (in bytes) for the whole code stream.
Definition: grok.h:1007
grk_raw_cparameters raw_cp
Definition: grok.h:986
uint8_t numresolution
number of resolutions
Definition: grok.h:949
uint32_t image_offset_y0
subimage compressing: origin image offset in y direction
Definition: grok.h:977
GRK_SUPPORTED_FILE_FMT decod_format
input file format
Definition: grok.h:983
uint8_t newTilePartProgressionDivider
new tile part progression divider
Definition: grok.h:995
uint32_t cblockh_init
initial code block height (default to 64)
Definition: grok.h:953
GRK_RATE_CONTROL_ALGORITHM rateControlAlgorithm
Definition: grok.h:1025
bool allocationByQuality
rate control allocation by fixed_PSNR quality
Definition: grok.h:931
uint32_t roi_shift
region of interest: upshift value
Definition: grok.h:963
uint8_t subsampling_dy
subsampling value for dy
Definition: grok.h:981
bool tile_size_on
size of tile: tile_size_on = false (not in argument) or = true (in argument)
Definition: grok.h:914
uint32_t t_height
YTsiz.
Definition: grok.h:922
bool write_capture_resolution_from_file
Definition: grok.h:1014
bool enableTilePartGeneration
Tile part generation.
Definition: grok.h:993
uint32_t res_spec
Definition: grok.h:965
uint8_t mct
MCT (multiple component transform)
Definition: grok.h:997
uint16_t numlayers
number of layers
Definition: grok.h:924
int32_t deviceId
Definition: grok.h:1027
GRK_SUPPORTED_FILE_FMT cod_format
output file format
Definition: grok.h:985
double capture_resolution_from_file[2]
Definition: grok.h:1015
uint32_t max_comp_size
Maximum size (in bytes) for each component.
Definition: grok.h:991
bool irreversible
1 : use the irreversible DWT 9-7, 0 : use lossless compression (default)
Definition: grok.h:958
uint32_t t_width
XTsiz.
Definition: grok.h:920
bool write_display_resolution
Definition: grok.h:1020
uint8_t cblk_sty
code block style
Definition: grok.h:955
uint8_t csty
csty : coding style
Definition: grok.h:939
uint32_t prch_init[GRK_J2K_MAXRLVLS]
initial precinct height
Definition: grok.h:969
bool is_binary_comment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:936
uint16_t rsiz
RSIZ value To be used to combine GRK_PROFILE_*, GRK_EXTENSION_* and (sub)levels values.
Definition: grok.h:1010
char infile[GRK_PATH_LEN]
input file name
Definition: grok.h:971
double layer_distortion[GRK_MAX_LAYERS]
layer PSNR values
Definition: grok.h:933
void * mct_data
Naive implementation of MCT restricted to a single reversible array based compressing without offset ...
Definition: grok.h:1000
uint32_t tx0
XTOsiz.
Definition: grok.h:916
char * comment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:934
bool write_capture_resolution
Definition: grok.h:1017
uint8_t subsampling_dx
subsampling value for dx
Definition: grok.h:979
bool writeTLM
Definition: grok.h:1032
uint32_t prcw_init[GRK_J2K_MAXRLVLS]
initial precinct width
Definition: grok.h:967
size_t num_comments
Definition: grok.h:937
uint16_t framerate
Definition: grok.h:1011
double display_resolution[2]
Definition: grok.h:1021
bool writePLT
Definition: grok.h:1031
int32_t roi_compno
region of interest: affected component in [0..3]; -1 indicates no ROI
Definition: grok.h:961
uint32_t ty0
YTOsiz.
Definition: grok.h:918
uint32_t duration
Definition: grok.h:1028
bool apply_icc_
Definition: grok.h:1023
double layer_rate[GRK_MAX_LAYERS]
layers rates expressed as compression ratios.
Definition: grok.h:929
uint32_t kernelBuildOptions
Definition: grok.h:1029
grk_progression progression[GRK_J2K_MAXRLVLS]
progressions
Definition: grok.h:945
uint32_t numpocs
number of progression order changes (POCs), default to 0
Definition: grok.h:947
double capture_resolution[2]
Definition: grok.h:1018
Core decompression parameters.
Definition: grok.h:480
uint32_t randomAccessFlags_
Definition: grok.h:498
grk_io_pixels_callback io_buffer_callback
Definition: grok.h:500
GRK_TILE_CACHE_STRATEGY tileCacheStrategy
Definition: grok.h:496
void * io_user_data
Definition: grok.h:501
uint8_t reduce
Set the number of highest resolution levels to be discarded.
Definition: grok.h:488
uint16_t max_layers
Set the maximum number of quality layers to decompress.
Definition: grok.h:495
grk_io_register_reclaim_callback io_register_client_callback
Definition: grok.h:502
Decompression parameters.
Definition: grok.h:521
float dw_y1
Decompress window bottom boundary.
Definition: grok.h:539
int32_t deviceId
Definition: grok.h:561
float dw_x0
Decompress window left boundary.
Definition: grok.h:533
bool io_xml
Definition: grok.h:552
grk_precision * precision
Definition: grok.h:543
uint32_t numThreads
Definition: grok.h:565
GRK_SUPPORTED_FILE_FMT cod_format
output file format
Definition: grok.h:531
uint32_t kernelBuildOptions
Definition: grok.h:563
char infile[GRK_PATH_LEN]
input file name
Definition: grok.h:525
uint32_t compressionLevel
Definition: grok.h:558
bool force_rgb
Definition: grok.h:546
uint32_t compression
Definition: grok.h:553
bool singleTileDecompress
Definition: grok.h:542
uint32_t repeats
Definition: grok.h:564
bool upsample
Definition: grok.h:548
grk_decompress_core_params core
core library parameters
Definition: grok.h:523
uint16_t tileIndex
tile number of the decompressed tile
Definition: grok.h:541
bool verbose_
Verbose mode.
Definition: grok.h:560
uint32_t duration
Definition: grok.h:562
float dw_y0
Decompress window up boundary.
Definition: grok.h:537
uint32_t numPrecision
Definition: grok.h:544
bool split_pnm
Definition: grok.h:550
GRK_CODEC_FORMAT decod_format
input file format
Definition: grok.h:529
float dw_x1
Decompress window right boundary.
Definition: grok.h:535
char outfile[GRK_PATH_LEN]
output file name
Definition: grok.h:527
Header info.
Definition: grok.h:361
uint32_t cblockh_init
initial code block height, default to 64
Definition: grok.h:380
uint16_t comment_len[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:428
bool upsample
Definition: grok.h:367
bool forceRGB
Definition: grok.h:366
bool splitByComponent
Definition: grok.h:370
uint32_t num_asocs
Definition: grok.h:432
char * comment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:427
uint32_t t_width
XTsiz.
Definition: grok.h:411
uint32_t numresolutions
number of resolutions
Definition: grok.h:389
uint32_t prch_init[GRK_J2K_MAXRLVLS]
initial precinct height
Definition: grok.h:405
size_t xml_data_len
Definition: grok.h:425
size_t num_comments
Definition: grok.h:426
uint32_t numPrecision
Definition: grok.h:369
uint8_t csty
Definition: grok.h:395
uint32_t t_grid_height
tile grid height
Definition: grok.h:417
grk_asoc asocs[GRK_NUM_ASOC_BOXES_SUPPORTED]
Definition: grok.h:431
uint32_t tx0
XTOsiz.
Definition: grok.h:407
uint32_t ty0
YTOsiz.
Definition: grok.h:409
uint32_t cblockw_init
initial code block width, default to 64
Definition: grok.h:378
uint16_t rsiz
RSIZ value To be used to combine GRK_PROFILE_*, GRK_EXTENSION_* and (sub)levels values.
Definition: grok.h:387
uint32_t mct
multi-component transform identifier
Definition: grok.h:384
uint32_t prcw_init[GRK_J2K_MAXRLVLS]
initial precinct width
Definition: grok.h:403
grk_precision * precision
Definition: grok.h:368
uint32_t t_height
YTsiz.
Definition: grok.h:413
GRK_SUPPORTED_FILE_FMT decompressFormat
Definition: grok.h:365
uint8_t cblk_sty
Definition: grok.h:401
uint32_t t_grid_width
tile grid width
Definition: grok.h:415
uint8_t * xml_data
Definition: grok.h:424
bool isBinaryComment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:429
bool singleTileDecompress
Definition: grok.h:371
bool irreversible
1 : use the irreversible DWT 9-7, 0 : use lossless compression (default)
Definition: grok.h:382
uint16_t numlayers
number of layers
Definition: grok.h:419
Image component.
Definition: grok.h:572
uint32_t h
data height
Definition: grok.h:582
uint8_t dy
YRsiz: vertical separation of a sample of component with respect to the reference grid.
Definition: grok.h:588
GRK_CHANNEL_ASSOC association
Definition: grok.h:594
GRK_CHANNEL_TYPE type
Definition: grok.h:593
uint8_t dx
XRsiz: horizontal separation of a sample of component with respect to the reference grid.
Definition: grok.h:585
bool sgnd
Definition: grok.h:592
uint32_t w
data width
Definition: grok.h:578
uint8_t prec
precision
Definition: grok.h:590
uint16_t Ycrg
Definition: grok.h:596
int32_t * data
image component data
Definition: grok.h:598
uint32_t x0
x component offset compared to the whole image
Definition: grok.h:574
uint16_t Xcrg
Definition: grok.h:596
uint32_t y0
y component offset compared to the whole image
Definition: grok.h:576
uint32_t stride
data stride
Definition: grok.h:580
Definition: grok.h:603
grk_color color
Definition: grok.h:605
uint8_t * xmp_buf
Definition: grok.h:608
grk_object obj
Definition: grok.h:604
size_t xmp_len
Definition: grok.h:609
size_t iptc_len
Definition: grok.h:607
uint8_t * iptc_buf
Definition: grok.h:606
Definition: grok.h:613
uint16_t decompressNumComps
Definition: grok.h:641
grk_precision * precision
Definition: grok.h:637
bool has_capture_resolution
Definition: grok.h:630
uint16_t numcomps
number of components in the image
Definition: grok.h:626
uint64_t packedRowBytes
Definition: grok.h:649
uint32_t y0
YOsiz: vertical offset from the origin of the reference grid to the top side of the image area.
Definition: grok.h:620
GRK_COLOR_SPACE color_space
Definition: grok.h:627
bool upsample
Definition: grok.h:636
grk_image_comp * comps
Definition: grok.h:651
bool splitByComponent
Definition: grok.h:640
bool channelDefinitionApplied_
Definition: grok.h:629
uint32_t decompressWidth
Definition: grok.h:642
grk_io_buf interleavedData
Definition: grok.h:646
GRK_COLOR_SPACE decompressColourSpace
Definition: grok.h:645
bool hasMultipleTiles
Definition: grok.h:639
uint32_t x0
XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area.
Definition: grok.h:617
uint8_t decompressPrec
Definition: grok.h:644
grk_object obj
Definition: grok.h:614
uint32_t numPrecision
Definition: grok.h:638
bool has_display_resolution
Definition: grok.h:632
double display_resolution[2]
Definition: grok.h:633
uint32_t y1
Ysiz: height of the reference grid.
Definition: grok.h:624
double capture_resolution[2]
Definition: grok.h:631
grk_image_meta * meta
Definition: grok.h:650
uint32_t x1
Xsiz: width of the reference grid.
Definition: grok.h:622
GRK_SUPPORTED_FILE_FMT decompressFormat
Definition: grok.h:634
bool forceRGB
Definition: grok.h:635
uint32_t rowsPerTask
Definition: grok.h:648
uint32_t rowsPerStrip
Definition: grok.h:647
uint32_t decompressHeight
Definition: grok.h:643
bool paletteApplied_
Definition: grok.h:628
Definition: grok.h:436
bool pooled_
Definition: grok.h:441
size_t offset_
Definition: grok.h:438
size_t allocLen_
Definition: grok.h:440
uint8_t * data_
Definition: grok.h:437
size_t len_
Definition: grok.h:439
uint32_t index_
Definition: grok.h:442
Definition: grok.h:446
uint32_t maxPooledRequests_
Definition: grok.h:447
Grok ref-counted object.
Definition: grok.h:126
void * wrapper
Definition: grok.h:127
Palette data.
Definition: grok.h:257
grk_component_mapping_comp * component_mapping
Definition: grok.h:260
uint8_t num_channels
Definition: grok.h:261
int32_t * lut
Definition: grok.h:258
uint16_t num_entries
Definition: grok.h:259
bool * channel_sign
Definition: grok.h:262
uint8_t * channel_prec
Definition: grok.h:263
Plugin band.
Definition: grok.h:700
float stepsize
Definition: grok.h:704
uint8_t orientation
Definition: grok.h:701
uint64_t numPrecincts
Definition: grok.h:702
grk_plugin_precinct ** precincts
Definition: grok.h:703
Plugin code block.
Definition: grok.h:671
uint8_t * compressedData
Definition: grok.h:679
uint32_t y0
Definition: grok.h:675
size_t numPasses
Definition: grok.h:682
unsigned int sortedIndex
Definition: grok.h:684
uint8_t numBitPlanes
Definition: grok.h:681
grk_plugin_pass passes[67]
Definition: grok.h:683
uint32_t x0
Definition: grok.h:675
unsigned int * contextStream
Definition: grok.h:676
uint32_t y1
Definition: grok.h:675
uint32_t numPix
Definition: grok.h:678
uint32_t x1
Definition: grok.h:675
uint32_t compressedDataLength
Definition: grok.h:680
grk_codec * codec
Definition: grok.h:1466
uint32_t full_image_y0
Definition: grok.h:1475
GRK_CODEC_FORMAT decod_format
Definition: grok.h:1463
unsigned int error_code
Definition: grok.h:1472
grk_decompress_parameters * decompressor_parameters
Definition: grok.h:1468
grk_header_info header_info
Definition: grok.h:1467
GRK_SUPPORTED_FILE_FMT cod_format
Definition: grok.h:1465
size_t deviceId
Definition: grok.h:1458
grk_plugin_tile * tile
Definition: grok.h:1471
uint32_t full_image_x0
Definition: grok.h:1474
void * user_data
Definition: grok.h:1476
bool plugin_owns_image
Definition: grok.h:1470
uint32_t decompress_flags
Definition: grok.h:1473
const char * output_file_name
Definition: grok.h:1461
GROK_INIT_DECOMPRESSORS init_decompressors_func
Definition: grok.h:1459
const char * input_file_name
Definition: grok.h:1460
grk_image * image
Definition: grok.h:1469
Definition: grok.h:1390
bool verbose
Definition: grok.h:1392
int32_t deviceId
Definition: grok.h:1391
Definition: grok.h:1342
const char * pluginPath
Definition: grok.h:1343
Plugin pass.
Definition: grok.h:661
size_t rate
Definition: grok.h:663
size_t length
Definition: grok.h:664
double distortionDecrease
Definition: grok.h:662
Plugin precinct.
Definition: grok.h:691
grk_plugin_code_block ** blocks
Definition: grok.h:693
uint64_t numBlocks
Definition: grok.h:692
Plugin resolution.
Definition: grok.h:711
size_t numBands
Definition: grok.h:713
size_t level
Definition: grok.h:712
grk_plugin_band ** band
Definition: grok.h:714
Plugin tile.
Definition: grok.h:739
uint32_t decompress_flags
Definition: grok.h:740
grk_plugin_tile_component ** tileComponents
Definition: grok.h:742
size_t numComponents
Definition: grok.h:741
Precision.
Definition: grok.h:352
grk_precision_mode mode
Definition: grok.h:354
uint8_t prec
Definition: grok.h:353
Progression order change.
Definition: grok.h:135
uint16_t comp_temp
Definition: grok.h:166
uint32_t tx1
Definition: grok.h:143
uint32_t tp_txE
Definition: grok.h:161
uint8_t res_temp
Definition: grok.h:167
GRK_PROG_ORDER specifiedCompressionPocProg
Definition: grok.h:138
uint32_t tx0
tile dimensions
Definition: grok.h:141
uint16_t compE
Definition: grok.h:147
uint8_t resS
Definition: grok.h:148
uint64_t prec_temp
Definition: grok.h:168
uint32_t tp_tyE
Definition: grok.h:163
uint64_t precE
Definition: grok.h:151
uint64_t precS
Definition: grok.h:150
uint32_t ty0
Definition: grok.h:142
uint32_t ty1
Definition: grok.h:144
uint32_t ty0_temp
Definition: grok.h:171
uint16_t tpCompE
Definition: grok.h:155
uint32_t tp_tyS
Definition: grok.h:162
uint32_t dy
Definition: grok.h:165
GRK_PROG_ORDER progression
Definition: grok.h:136
uint32_t dx
Definition: grok.h:164
uint16_t layE
Definition: grok.h:153
uint16_t layS
Definition: grok.h:152
char progressionString[5]
Definition: grok.h:137
uint8_t tpResE
Definition: grok.h:157
uint32_t tx0_temp
Definition: grok.h:170
uint32_t tileno
Definition: grok.h:139
uint16_t lay_temp
Definition: grok.h:169
uint16_t tpLayE
Definition: grok.h:159
uint64_t tpPrecE
Definition: grok.h:158
uint16_t tpCompS
Definition: grok.h:154
uint16_t compS
progression order bounds specified by POC
Definition: grok.h:146
uint32_t tp_txS
Definition: grok.h:160
uint8_t resE
Definition: grok.h:149
uint8_t tpResS
Definition: grok.h:156
RAW component compress parameters.
Definition: grok.h:176
uint8_t dy
subsampling in X direction
Definition: grok.h:178
uint8_t dx
Definition: grok.h:177
RAW image compress parameters.
Definition: grok.h:184
uint8_t prec
number of components of the raw image
Definition: grok.h:188
uint32_t width
Definition: grok.h:185
uint16_t numcomps
height of the raw image
Definition: grok.h:187
grk_raw_comp_cparameters * comps
signed/unsigned raw image
Definition: grok.h:190
bool sgnd
bit depth of the raw image
Definition: grok.h:189
uint32_t height
width of the raw image
Definition: grok.h:186
JPEG 2000 stream parameters - either file or buffer.
Definition: grok.h:461
uint8_t * buf
Definition: grok.h:466
size_t len
Definition: grok.h:467
const char * file
Definition: grok.h:463
bool outputFileNameIsRelative
Definition: grok.h:1403
grk_cparameters * compressor_parameters
Definition: grok.h:1405
grk_image * image
Definition: grok.h:1406
grk_plugin_tile * tile
Definition: grok.h:1407
const char * output_file_name
Definition: grok.h:1404
bool transferExifTags
Definition: grok.h:1410
grk_stream_params stream_params
Definition: grok.h:1408
unsigned int error_code
Definition: grok.h:1409
const char * input_file_name
Definition: grok.h:1402
Plugin tile component.
Definition: grok.h:721
grk_plugin_resolution ** resolutions
Definition: grok.h:723
size_t numResolutions
Definition: grok.h:722