Grok  9.5.0
grok.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2016-2021 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 
22 #pragma once
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #include "grk_config.h"
29 #include <stdint.h>
30 #include <stdio.h>
31 #include <stdbool.h>
32 #include <limits.h>
33 
34 #ifdef __GNUC__
35 #define GRK_DEPRECATED(func) func __attribute__((deprecated))
36 #elif defined(_MSC_VER)
37 #define GRK_DEPRECATED(func) __declspec(deprecated) func
38 #else
39 #pragma message("WARNING: You need to implement DEPRECATED for this compiler")
40 #define GRK_DEPRECATED(func) func
41 #endif
42 
43 #if defined(GRK_STATIC) || !defined(_WIN32)
44 #if defined(GRK_STATIC) /* static library uses "hidden" */
45 #define GRK_API __attribute__((visibility("hidden")))
46 #else
47 #define GRK_API __attribute__((visibility("default")))
48 #endif
49 #define GRK_CALLCONV
50 #else
51 #define GRK_CALLCONV __stdcall
52 #if defined(GRK_EXPORTS) || defined(DLL_EXPORT)
53 #define GRK_API __declspec(dllexport)
54 #else
55 #define GRK_API __declspec(dllimport)
56 #endif
57 #endif
58 
60 {
64 
66 {
75  GRK_RAW_FMT, /* MSB / Big Endian */
77  GRK_RAWL_FMT, /* LSB / Little Endian */
80 
81 #define GRK_PATH_LEN 4096
82 #define GRK_MAX_LAYERS 100
83 #define GRK_MAX_SUPPORTED_IMAGE_PRECISION 16 // maximum supported precision for Grok library
84 
85 /*
86  * note: range for number of decomposition levels is 0-32
87  * So, accordingly, range for number of resolutions is 1-33
88  * */
89 
90 #define GRK_J2K_MAX_DECOMP_LVLS 32
91 #define GRK_J2K_MAXRLVLS \
92  (GRK_J2K_MAX_DECOMP_LVLS + 1)
93 #define GRK_J2K_MAXBANDS (3 * GRK_J2K_MAXRLVLS - 2)
95 // used by dump
96 #define GRK_IMG_INFO 1
97 #define GRK_J2K_MH_INFO 2
98 #define GRK_J2K_TH_INFO 4
99 #define GRK_J2K_TCH_INFO 8
100 #define GRK_J2K_MH_IND 16
101 #define GRK_J2K_TH_IND 32
102 #define GRK_JP2_INFO 128
103 #define GRK_JP2_IND 256
105 #define GRK_CBLKSTY_LAZY 0x001
106 #define GRK_CBLKSTY_RESET 0x002
107 #define GRK_CBLKSTY_TERMALL 0x004
108 #define GRK_CBLKSTY_VSC 0x008
109 #define GRK_CBLKSTY_PTERM 0x010
110 #define GRK_CBLKSTY_SEGSYM 0x020
111 #define GRK_CBLKSTY_HT 0x040
112 #define GRK_CBLKSTY_HT_MIXED 0x080
113 #define GRK_CBLKSTY_HT_PHLD 0x100
114 #define GRK_JPH_RSIZ_FLAG 0x4000
136 #define GRK_PROFILE_NONE 0x0000
137 #define GRK_PROFILE_0 0x0001
138 #define GRK_PROFILE_1 0x0002
139 #define GRK_PROFILE_CINEMA_2K 0x0003
140 #define GRK_PROFILE_CINEMA_4K 0x0004
141 #define GRK_PROFILE_CINEMA_S2K 0x0005
142 #define GRK_PROFILE_CINEMA_S4K 0x0006
143 #define GRK_PROFILE_CINEMA_LTS \
144  0x0007
145 #define GRK_PROFILE_BC_SINGLE 0x0100
146 #define GRK_PROFILE_BC_MULTI 0x0200
147 #define GRK_PROFILE_BC_MULTI_R \
148  0x0300
149 #define GRK_PROFILE_BC_MASK 0x030F
150 #define GRK_PROFILE_IMF_2K 0x0400
151 #define GRK_PROFILE_IMF_4K 0x0500
152 #define GRK_PROFILE_IMF_8K 0x0600
153 #define GRK_PROFILE_IMF_2K_R \
154  0x0700
155 #define GRK_PROFILE_IMF_4K_R \
156  0x0800
157 #define GRK_PROFILE_IMF_8K_R \
158  0x0900
159 #define GRK_PROFILE_MASK 0x0FFF
160 #define GRK_PROFILE_PART2 0x8000
161 #define GRK_PROFILE_PART2_EXTENSIONS_MASK 0x3FFF // Mask for Part-2 extension bits
162 
166 #define GRK_EXTENSION_NONE 0x0000
167 #define GRK_EXTENSION_MCT 0x0100
168 #define GRK_IS_PART2(v) ((v)&GRK_PROFILE_PART2)
169 
170 #define GRK_IS_CINEMA(v) (((v) >= GRK_PROFILE_CINEMA_2K) && ((v) <= GRK_PROFILE_CINEMA_S4K))
171 #define GRK_IS_STORAGE(v) ((v) == GRK_PROFILE_CINEMA_LTS)
172 
173 /*
174  *
175  * *********************************************
176  * Broadcast level (3-0 LSB) (15444-1 AMD4,AMD8)
177  * *********************************************
178  *
179  * indicates maximum bit rate and sample rate for a code stream
180  *
181  * Note: Mbit/s == 10^6 bits/s; Msamples/s == 10^6 samples/s
182  *
183  * 0: no maximum rate
184  * 1: 200 Mbits/s, 65 Msamples/s
185  * 2: 200 Mbits/s, 130 Msamples/s
186  * 3: 200 Mbits/s, 195 Msamples/s
187  * 4: 400 Mbits/s, 260 Msamples/s
188  * 5: 800Mbits/s, 520 Msamples/s
189  * >= 6: 2^(level-6) * 1600 Mbits/s, 2^(level-6) * 1200 Msamples/s
190  *
191  * Note: level cannot be greater than 11
192  *
193  * ****************
194  * Broadcast tiling
195  * ****************
196  *
197  * Either single-tile or multi-tile. Multi-tile only permits
198  * 1 or 4 tiles per frame, where multiple tiles have identical
199  * sizes, and are configured in either 2x2 or 1x4 layout.
200  *
201  *************************************************************
202  *
203  * ***************************************
204  * IMF main-level (3-0) LSB (15444-1 AMD8)
205  * ***************************************
206  *
207  * main-level indicates maximum number of samples per second,
208  * as listed above.
209  *
210  *
211  * **************************************
212  * IMF sub-level (7-4) LSB (15444-1 AMD8)
213  * **************************************
214  *
215  * sub-level indicates maximum bit rate for a code stream:
216  *
217  * 0: no maximum rate
218  * >0: 2^sub-level * 100 Mbits/second
219  *
220  * Note: sub-level cannot be greater than 9, and cannot be larger
221  * then maximum of (main-level -2) and 1.
222  *
223  */
225 #define GRK_GET_IMF_OR_BROADCAST_PROFILE(v) ((v)&0x0f00)
226 
227 #define GRK_LEVEL_MAX 11U
228 #define GRK_GET_LEVEL(v) ((v)&0xf)
230 /******* BROADCAST **********/
231 
232 #define GRK_IS_BROADCAST(v) \
233  (((v) >= GRK_PROFILE_BC_SINGLE) && ((v) <= (GRK_PROFILE_BC_MULTI_R | 0x000b)) && \
234  (((v)&0xf) <= 0xb))
235 
236 /* Maximum component sampling Rate (Mbits/sec) per level */
237 #define GRK_BROADCAST_LEVEL_1_MBITSSEC 200U
238 #define GRK_BROADCAST_LEVEL_2_MBITSSEC 200U
239 #define GRK_BROADCAST_LEVEL_3_MBITSSEC 200U
240 #define GRK_BROADCAST_LEVEL_4_MBITSSEC 400U
241 #define GRK_BROADCAST_LEVEL_5_MBITSSEC 800U
242 #define GRK_BROADCAST_LEVEL_6_MBITSSEC 1600U
243 #define GRK_BROADCAST_LEVEL_7_MBITSSEC 3200U
244 #define GRK_BROADCAST_LEVEL_8_MBITSSEC 6400U
245 #define GRK_BROADCAST_LEVEL_9_MBITSSEC 12800U
246 #define GRK_BROADCAST_LEVEL_10_MBITSSEC 25600U
247 #define GRK_BROADCAST_LEVEL_11_MBITSSEC 51200U
249 #define GRK_BROADCAST_LEVEL_1_MSAMPLESSEC 64U
250 #define GRK_BROADCAST_LEVEL_2_MSAMPLESSEC 130U
251 #define GRK_BROADCAST_LEVEL_3_MSAMPLESSEC 195U
252 #define GRK_BROADCAST_LEVEL_4_MSAMPLESSEC 260U
253 #define GRK_BROADCAST_LEVEL_5_MSAMPLESSEC 520U
254 #define GRK_BROADCAST_LEVEL_6_MSAMPLESSEC 1200U
255 #define GRK_BROADCAST_LEVEL_7_MSAMPLESSEC 2400U
256 #define GRK_BROADCAST_LEVEL_8_MSAMPLESSEC 4800U
257 #define GRK_BROADCAST_LEVEL_9_MSAMPLESSEC 9600U
258 #define GRK_BROADCAST_LEVEL_10_MSAMPLESSEC 19200U
259 #define GRK_BROADCAST_LEVEL_11_MSAMPLESSEC 38400U
261 /********IMF ***********************************************************************/
262 
263 #define GRK_IS_IMF(v) \
264  (((v) >= GRK_PROFILE_IMF_2K) && ((v) <= (GRK_PROFILE_IMF_8K_R | 0x009b)) && \
265  (((v)&0xf) <= 0xb) && (((v)&0xf0) <= 0x90))
266 
267 /* Maximum component sampling rate (MSamples/sec) per main level */
268 #define GRK_IMF_MAINLEVEL_1_MSAMPLESSEC 65U
269 #define GRK_IMF_MAINLEVEL_2_MSAMPLESSEC 130U
270 #define GRK_IMF_MAINLEVEL_3_MSAMPLESSEC 195U
271 #define GRK_IMF_MAINLEVEL_4_MSAMPLESSEC 260U
272 #define GRK_IMF_MAINLEVEL_5_MSAMPLESSEC 520U
273 #define GRK_IMF_MAINLEVEL_6_MSAMPLESSEC 1200U
274 #define GRK_IMF_MAINLEVEL_7_MSAMPLESSEC 2400U
275 #define GRK_IMF_MAINLEVEL_8_MSAMPLESSEC 4800U
276 #define GRK_IMF_MAINLEVEL_9_MSAMPLESSEC 9600U
277 #define GRK_IMF_MAINLEVEL_10_MSAMPLESSEC 19200U
278 #define GRK_IMF_MAINLEVEL_11_MSAMPLESSEC 38400U
280 #define GRK_IMF_SUBLEVEL_MAX 9U
281 #define GRK_GET_IMF_SUBLEVEL(v) (((v) >> 4) & 0xf)
284 #define GRK_IMF_SUBLEVEL_1_MBITSSEC 200U
285 #define GRK_IMF_SUBLEVEL_2_MBITSSEC 400U
286 #define GRK_IMF_SUBLEVEL_3_MBITSSEC 800U
287 #define GRK_IMF_SUBLEVEL_4_MBITSSEC 1600U
288 #define GRK_IMF_SUBLEVEL_5_MBITSSEC 3200U
289 #define GRK_IMF_SUBLEVEL_6_MBITSSEC 6400U
290 #define GRK_IMF_SUBLEVEL_7_MBITSSEC 12800U
291 #define GRK_IMF_SUBLEVEL_8_MBITSSEC 25600U
292 #define GRK_IMF_SUBLEVEL_9_MBITSSEC 51200U
293 /**********************************************************************************/
294 
298 #define GRK_CINEMA_24_CS 1302083U
299 #define GRK_CINEMA_48_CS 651041U
300 #define GRK_CINEMA_24_COMP 1041666U
301 #define GRK_CINEMA_48_COMP 520833U
306 typedef enum _GRK_PROG_ORDER
307 {
309  GRK_LRCP = 0,
310  GRK_RLCP = 1,
311  GRK_RPCL = 2,
312  GRK_PCRL = 3,
313  GRK_CPRL = 4,
316 
317 /*
318  *
319  * CIE Lab #defines
320  */
321 #define GRK_CUSTOM_CIELAB_SPACE 0x0
322 #define GRK_DEFAULT_CIELAB_SPACE 0x44454600 //'DEF'
323 #define GRK_CIE_DAY ((((uint32_t)'C') << 24) + (((uint32_t)'T') << 16))
324 #define GRK_CIE_D50 ((uint32_t)0x00443530)
325 #define GRK_CIE_D65 ((uint32_t)0x00443635)
326 #define GRK_CIE_D75 ((uint32_t)0x00443735)
327 #define GRK_CIE_SA ((uint32_t)0x00005341)
328 #define GRK_CIE_SC ((uint32_t)0x00005343)
329 #define GRK_CIE_F2 ((uint32_t)0x00004632)
330 #define GRK_CIE_F7 ((uint32_t)0x00004637)
331 #define GRK_CIE_F11 ((uint32_t)0x00463131)
332 
336 typedef enum _GRK_COLOR_SPACE
337 {
346  GRK_CLRSPC_ICC = 9
348 
349 /* JPEG 2000 standard colour space enumeration */
351 {
357  GRK_ENUM_CLRSPC_PHOTO_YCC = 9, // Kodak PhotoYCC
358  GRK_ENUM_CLRSPC_CMY = 11, // cyan, magenta, yellow
359  GRK_ENUM_CLRSPC_CMYK = 12, // cyan, magenta, yellow, black
365  GRK_ENUM_CLRSPC_SYCC = 18, // standard YCC
368  GRK_ENUM_CLRSPC_ROMMRGB = 21, // Reference Output Medium Metric RGB
371  GRK_ENUM_CLRSPC_EYCC = 24, // extended YCC
373 
377 typedef enum _GRK_CODEC_FORMAT
378 {
381  GRK_CODEC_JP2 = 2
383 
384 #define GRK_NUM_COMMENTS_SUPPORTED 256
385 #define GRK_NUM_ASOC_BOXES_SUPPORTED 256
386 #define GRK_MAX_COMMENT_LENGTH (UINT16_MAX - 2)
387 
389 {
393 
400 typedef void (*grk_msg_callback)(const char* msg, void* client_data);
401 
407 typedef struct _grk_object
408 {
409  void* wrapper;
411 
416 typedef struct _grk_progression
417 {
419  uint16_t layS;
420  uint16_t layE;
421  uint8_t resS;
422  uint8_t resE;
423  uint16_t compS;
424  uint16_t compE;
425  uint64_t precS;
426  uint64_t precE;
427 
434  uint32_t tileno;
436  uint32_t tx0;
437  uint32_t tx1;
438  uint32_t ty0;
439  uint32_t ty1;
441  uint16_t tpLayE;
442  uint8_t tpResS;
443  uint8_t tpResE;
444  uint16_t tpCompS;
445  uint16_t tpCompE;
446  uint64_t tpPrecE;
448  uint32_t tp_txS;
449  uint32_t tp_txE;
450  uint32_t tp_tyS;
451  uint32_t tp_tyE;
452  uint32_t dx;
453  uint32_t dy;
455  uint16_t lay_temp;
456  uint8_t res_temp;
457  uint16_t comp_temp;
458  uint64_t prec_temp;
459  uint32_t tx0_temp;
460  uint32_t ty0_temp;
462 
466 {
467  uint32_t dx;
468  uint32_t dy;
471 
474 typedef struct _grk_raw_cparameters
475 {
476  uint32_t width;
477  uint32_t height;
478  uint16_t numcomps;
479  uint8_t prec;
480  bool sgnd;
484 
488 typedef struct _grk_cparameters
489 {
493  uint32_t tx0;
495  uint32_t ty0;
497  uint32_t t_width;
499  uint32_t t_height;
501  uint16_t numlayers;
514  size_t num_comments;
516  uint8_t csty;
517  /* number of guard bits */
518  uint8_t numgbits;
524  uint32_t numpocs;
526  uint8_t numresolution;
528  uint32_t cblockw_init;
530  uint32_t cblockh_init;
532  uint8_t cblk_sty;
533  /* flag for high throughput */
534  bool isHT;
540  int32_t roi_compno;
542  uint32_t roi_shift;
543  /* number of precinct size specifications */
544  uint32_t res_spec;
554  uint32_t image_offset_x0;
556  uint32_t image_offset_y0;
558  uint32_t subsampling_dx;
560  uint32_t subsampling_dy;
570  uint32_t max_comp_size;
576  uint8_t mct;
579  void* mct_data;
586  uint64_t max_cs_size;
589  uint16_t rsiz;
590  uint16_t framerate;
591 
592  // set to true if input file stores capture resolution
595 
598 
601 
602  // 0: bisect with all truncation points
603  // 1: bisect with only feasible truncation points
605  uint32_t numThreads;
606  int32_t deviceId;
607  uint32_t duration; // seconds
609  uint32_t repeats;
610  bool writePLT;
611  bool writeTLM;
612  bool verbose;
614 
619 {
620  uint16_t cn;
621  uint16_t typ;
622  uint16_t asoc;
624 
629 {
633 
638 {
639  uint16_t component_index;
640  uint8_t mapping_type;
641  uint8_t palette_column;
643 
647 typedef struct _grk_palette_data
648 {
649  int32_t* lut;
650  uint16_t num_entries;
652  uint8_t num_channels;
654  uint8_t* channel_prec;
656 
660 typedef struct grk_color
661 {
662  uint8_t* icc_profile_buf;
663  uint32_t icc_profile_len;
668 
669 typedef struct grk_asoc
670 {
671  uint32_t level; // 0 for root level
672  const char* label;
673  uint8_t* xml;
674  uint32_t xml_len;
676 
680 typedef struct _grk_header_info
681 {
683  uint32_t cblockw_init;
685  uint32_t cblockh_init;
689  uint32_t mct;
692  uint16_t rsiz;
694  uint32_t numresolutions;
695  // coding style can be specified in main header COD segment,
696  // tile header COD segment, and tile component COC segment.
697  // !!! Assume that coding style does not vary across tile components !!!
698  uint8_t csty;
699  // code block style is specified in main header COD segment, and can
700  // be overridden in a tile header. !!! Assume that style does
701  // not vary across tiles !!!
702  uint8_t cblk_sty;
708  uint32_t tx0;
710  uint32_t ty0;
712  uint32_t t_width;
714  uint32_t t_height;
716  uint32_t t_grid_width;
718  uint32_t t_grid_height;
720  uint16_t numlayers;
721 
722  // note: xml_data will remain valid
723  // until codec is destroyed
724  uint8_t* xml_data;
725  size_t xml_data_len;
726  size_t num_comments;
730 
732  uint32_t num_asocs;
733 
735 
739 typedef struct _grk_dparameters
740 {
748  uint8_t cp_reduce;
755  uint16_t cp_layer;
765  uint32_t DA_x0;
767  uint32_t DA_x1;
769  uint32_t DA_y0;
771  uint32_t DA_y1;
773  bool m_verbose;
775  uint16_t tileIndex;
778  uint32_t flags;
781 
785 typedef enum grk_prec_mode
786 {
790 
794 typedef struct _grk_prec
795 {
796  uint8_t prec;
799 
800 #define GRK_DECOMPRESS_COMPRESSION_LEVEL_DEFAULT (UINT_MAX)
801 
806 {
820  uint32_t DA_x0;
822  uint32_t DA_x1;
824  uint32_t DA_y0;
826  uint32_t DA_y1;
828  bool m_verbose;
830  uint16_t tileIndex;
834  uint32_t nb_precision;
835  /* force output colorspace to RGB */
836  bool force_rgb;
837  /* upsample components according to their dx/dy values */
838  bool upsample;
839  /* split output components to different files */
840  bool split_pnm;
841  /* serialize XML metadata to disk */
843  uint32_t compression;
844  // compression "quality". Meaning of "quality" depends
845  // on file format we are writing to
847  int32_t deviceId;
848  uint32_t duration; // seconds
850  uint32_t repeats;
851  bool verbose;
852  uint32_t numThreads;
854 
856 
857 /*
858  ==========================================================
859  I/O stream typedef definitions
860  ==========================================================
861  */
862 
863 /*
864  * Callback function prototype for read function
865  *
866  */
867 typedef size_t (*grk_stream_read_fn)(void* buffer, size_t numBytes, void* user_data);
868 
869 /*
870  * Callback function prototype for write function
871  */
872 typedef size_t (*grk_stream_write_fn)(void* buffer, size_t numBytes, void* user_data);
873 /*
874  * Callback function prototype for (absolute) seek function.
875  */
876 typedef bool (*grk_stream_seek_fn)(uint64_t numBytes, void* user_data);
877 /*
878  * Callback function prototype for free user data function
879  */
880 typedef void (*grk_stream_free_user_data_fn)(void* user_data);
881 /*
882  * JPEG 2000 stream.
883  */
885 
886 /*
887  ==============================
888  image typedef definitions
889  ==============================
890  */
891 
892 // component type
893 typedef enum GRK_COMPONENT_TYPE
894 {
895 
900 
902 
903 // component association
905 {
906 
912 
914 
918 typedef struct _grk_image_comp
919 {
923  uint32_t dx;
926  uint32_t dy;
928  uint32_t w;
930  uint32_t stride;
932  uint32_t h;
934  uint32_t x0;
936  uint32_t y0;
937  // component registration coordinates
938  uint16_t Xcrg, Ycrg;
940  uint8_t prec;
941  bool sgnd;
943  int32_t* data;
947 
948 // Image meta data: colour, IPTC and XMP
949 typedef struct _grk_image_meta
950 {
953  uint8_t* iptc_buf;
954  size_t iptc_len;
955  uint8_t* xmp_buf;
956  size_t xmp_len;
958 
959 typedef struct _grk_image
960 {
964  uint32_t x0;
967  uint32_t y0;
969  uint32_t x1;
971  uint32_t y1;
973  uint16_t numcomps;
983 
987 typedef struct _grk_image_comptparm
988 {
991  uint32_t dx;
994  uint32_t dy;
996  uint32_t w;
997  /* data stride */
998  uint32_t stride;
1000  uint32_t h;
1002  uint32_t x0;
1004  uint32_t y0;
1006  uint8_t prec;
1008  bool sgnd;
1010 
1012 // Structs to pass data between grok and plugin
1014 
1018 typedef struct _grk_plugin_pass
1019 {
1020  double distortionDecrease; // distortion decrease up to and including this pass
1021  size_t rate; // rate up to and including this pass
1022  size_t length; // stream length for this pass
1024 
1029 {
1031  // debug info
1032  uint32_t x0, y0, x1, y1;
1033  unsigned int* contextStream;
1035  uint32_t numPix;
1036  uint8_t* compressedData;
1038  uint8_t numBitPlanes;
1039  size_t numPasses;
1041  unsigned int sortedIndex;
1043 
1047 typedef struct _grk_plugin_precinct
1048 {
1049  uint64_t numBlocks;
1052 
1056 typedef struct _grk_plugin_band
1057 {
1058  uint8_t orientation;
1059  uint64_t numPrecincts;
1061  float stepsize;
1063 
1068 {
1069  size_t level;
1070  size_t numBands;
1073 
1078 {
1082 
1083 #define GRK_DECODE_HEADER (1 << 0)
1084 #define GRK_DECODE_T2 (1 << 1)
1085 #define GRK_DECODE_T1 (1 << 2)
1086 #define GRK_DECODE_POST_T1 (1 << 3)
1087 #define GRK_PLUGIN_DECODE_CLEAN (1 << 4)
1088 #define GRK_DECODE_ALL \
1089  (GRK_PLUGIN_DECODE_CLEAN | GRK_DECODE_HEADER | GRK_DECODE_T2 | GRK_DECODE_T1 | \
1090  GRK_DECODE_POST_T1)
1091 
1095 typedef struct _grk_plugin_tile
1096 {
1101 
1105 GRK_API const char* GRK_CALLCONV grk_version(void);
1106 
1113 GRK_API bool GRK_CALLCONV grk_initialize(const char* pluginPath, uint32_t numthreads);
1114 
1119 
1124 
1125 /*
1126  * Decrement ref count
1127  *
1128  */
1130 
1137 GRK_API bool GRK_CALLCONV grk_set_info_handler(grk_msg_callback p_callback, void* user_data);
1144 GRK_API bool GRK_CALLCONV grk_set_warning_handler(grk_msg_callback p_callback, void* user_data);
1151 GRK_API bool GRK_CALLCONV grk_set_error_handler(grk_msg_callback p_callback, void* user_data);
1152 
1163 GRK_API grk_image* GRK_CALLCONV grk_image_new(uint16_t numcmpts, grk_image_cmptparm* cmptparms,
1164  GRK_COLOR_SPACE clrspc, bool allocData);
1165 
1167 
1174 
1181 
1192 GRK_API grk_stream* GRK_CALLCONV grk_stream_new(size_t buffer_size, bool is_input);
1193 
1201  grk_stream_read_fn p_function);
1202 
1210  grk_stream_write_fn p_function);
1211 
1219  grk_stream_seek_fn p_function);
1220 
1228 GRK_API void GRK_CALLCONV grk_stream_set_user_data(grk_stream* stream, void* data,
1229  grk_stream_free_user_data_fn p_function);
1230 
1237 GRK_API void GRK_CALLCONV grk_stream_set_user_data_length(grk_stream* stream, uint64_t data_length);
1238 
1246  size_t buffer_size,
1247  bool is_read_stream);
1248 
1257 GRK_API grk_stream* GRK_CALLCONV grk_stream_create_mem_stream(uint8_t* buf, size_t buffer_len,
1258  bool ownsBuffer, bool is_read_stream);
1259 
1266 
1274  bool read_stream);
1275 
1285 
1292 
1302 
1314  grk_header_info* header_info);
1315 
1325 
1334 
1348 GRK_API bool GRK_CALLCONV grk_decompress_set_window(grk_codec* codec, uint32_t start_x,
1349  uint32_t start_y, uint32_t end_x,
1350  uint32_t end_y);
1351 
1359 GRK_API bool GRK_CALLCONV grk_decompress(grk_codec* p_decompressor, grk_plugin_tile* tile);
1360 
1369 GRK_API bool GRK_CALLCONV grk_decompress_tile(grk_codec* codec, uint16_t tileIndex);
1370 
1377 
1378 /* COMPRESSION FUNCTIONS*/
1379 
1388 
1411 
1420  grk_image* image);
1421 
1429 
1437 
1458 GRK_API bool GRK_CALLCONV grk_compress_tile(grk_codec* codec, uint16_t tileIndex, uint8_t* data,
1459  uint64_t data_size);
1460 
1469 
1475 
1484 GRK_API void GRK_CALLCONV grk_dump_codec(grk_codec* codec, uint32_t info_flag, FILE* output_stream);
1485 
1496 GRK_API bool GRK_CALLCONV grk_set_MCT(grk_cparameters* parameters, float* pEncodingMatrix,
1497  int32_t* p_dc_shift, uint32_t pNbComp);
1498 
1499 /******************
1500  Plugin Interface
1501  ******************/
1502 
1503 /*
1504  Plugin management
1505  */
1506 
1508 {
1509  const char* pluginPath;
1511 
1518 
1523 
1524 // No debug is done on plugin. Production setting.
1525 #define GRK_PLUGIN_STATE_NO_DEBUG 0x0
1526 
1527 /*
1528  For compress debugging, the plugin first performs a T1 compress.
1529  Then:
1530  1. perform host DWT on plugin MCT data, and write to host image
1531  This way, both plugin and host start from same point
1532  (assume MCT is equivalent for both host and plugin)
1533  2. map plugin DWT data, compare with host DWT, and then write to plugin image
1534  At this point in the code, the plugin image holds plugin DWT data. And if no warnings are
1535  triggered, then we can safely say that host and plugin DWT data are identical.
1536  3. Perform host compress, skipping MCT and DWT (they have already been performed)
1537  4. during host compress, each context that is formed is compared against context stream from plugin
1538  5. rate control - synch with plugin code stream, and compare
1539  6. T2 and store to disk
1540  */
1541 
1542 #define GRK_PLUGIN_STATE_DEBUG 0x1
1543 #define GRK_PLUGIN_STATE_PRE_TR1 0x2
1544 #define GRK_PLUGIN_STATE_DWT_QUANTIZATION 0x4
1545 #define GRK_PLUGIN_STATE_MCT_ONLY 0x8
1546 
1551 
1552 /*
1553  Plugin compressing
1554  */
1556 {
1557  int32_t deviceId;
1558  bool verbose;
1560 
1565 
1567 {
1568  const char* input_file_name;
1570  const char* output_file_name;
1574  uint8_t* compressBuffer;
1576  unsigned int error_code;
1579 
1581 
1588 GRK_API int32_t GRK_CALLCONV grk_plugin_compress(grk_cparameters* compress_parameters,
1590 
1602 GRK_API int32_t GRK_CALLCONV grk_plugin_batch_compress(const char* input_dir,
1603  const char* output_dir,
1604  grk_cparameters* compress_parameters,
1606 
1611 
1616 
1617 /*
1618  Plugin decompression
1619  */
1620 
1621 typedef int (*GROK_INIT_DECOMPRESSORS)(grk_header_info* header_info, grk_image* image);
1622 
1624 {
1625  size_t deviceId;
1627  const char* input_file_name;
1628  const char* output_file_name;
1629  // input file format 0: J2K, 1: JP2
1631  // output file format 0: PGX, 1: PxM, 2: BMP etc
1640  unsigned int error_code;
1642  uint32_t full_image_x0;
1643  uint32_t full_image_y0;
1644  void* user_data;
1646 
1648 
1657 
1669  const char* input_dir, const char* output_dir, grk_decompress_parameters* decompress_parameters,
1671 
1676 
1681 
1682 #ifdef __cplusplus
1683 }
1684 #endif
struct _grk_plugin_init_info grk_plugin_init_info
GRK_API void GRK_CALLCONV grk_image_all_components_data_free(grk_image *image)
Deallocate all component data for an image.
Definition: grok.cpp:199
struct _grk_cparameters grk_cparameters
Compress parameters.
GRK_API bool GRK_CALLCONV grk_compress_tile(grk_codec *codec, uint16_t tileIndex, uint8_t *data, uint64_t data_size)
Compress uncompressed data stored in a buffer.
Definition: grok.cpp:477
struct _grk_progression grk_progression
Progression order change.
struct _grk_image grk_image
GRK_COMPONENT_ASSOC
Definition: grok.h:905
@ GRK_COMPONENT_ASSOC_COLOUR_1
Definition: grok.h:908
@ GRK_COMPONENT_ASSOC_COLOUR_3
Definition: grok.h:910
@ GRK_COMPONENT_ASSOC_UNASSOCIATED
Definition: grok.h:911
@ GRK_COMPONENT_ASSOC_COLOUR_2
Definition: grok.h:909
@ GRK_COMPONENT_ASSOC_WHOLE_IMAGE
Definition: grok.h:907
GRK_API void GRK_CALLCONV grk_plugin_stop_batch_compress(void)
Stop batch compress.
Definition: grok.cpp:713
GRK_API bool GRK_CALLCONV grk_decompress(grk_codec *p_decompressor, grk_plugin_tile *tile)
Decompress image from a JPEG 2000 code stream.
Definition: grok.cpp:285
enum grk_prec_mode grk_precision_mode
Precision mode.
GRK_API void GRK_CALLCONV grk_plugin_stop_batch_decompress(void)
Stop batch decompress.
Definition: grok.cpp:811
struct _grk_channel_description grk_channel_description
Channel definition: channel index, type, association.
#define GRK_NUM_COMMENTS_SUPPORTED
Definition: grok.h:384
void(* grk_msg_callback)(const char *msg, void *client_data)
Callback function prototype for logging.
Definition: grok.h:400
GRK_RATE_CONTROL_ALGORITHM
Definition: grok.h:60
@ GRK_RATE_CONTROL_PCRD_OPT
Definition: grok.h:62
@ GRK_RATE_CONTROL_BISECT
Definition: grok.h:61
GRK_API void GRK_CALLCONV grk_plugin_cleanup(void)
Release plugin resources.
Definition: grok.cpp:619
GRK_API bool GRK_CALLCONV grk_plugin_load(grk_plugin_load_info info)
Load plugin.
Definition: grok.cpp:577
GRK_API void GRK_CALLCONV grk_stream_set_user_data_length(grk_stream *stream, uint64_t data_length)
Set the length of the user data for the stream.
Definition: grok.cpp:863
GRK_API size_t GRK_CALLCONV grk_stream_get_write_mem_stream_length(grk_stream *stream)
Get length of memory stream.
Definition: grok.cpp:532
enum _GRK_CODEC_FORMAT GRK_CODEC_FORMAT
Supported codecs.
GRK_COMPONENT_TYPE
Definition: grok.h:894
@ GRK_COMPONENT_TYPE_OPACITY
Definition: grok.h:897
@ GRK_COMPONENT_TYPE_UNSPECIFIED
Definition: grok.h:899
@ GRK_COMPONENT_TYPE_COLOUR
Definition: grok.h:896
@ GRK_COMPONENT_TYPE_PREMULTIPLIED_OPACITY
Definition: grok.h:898
grk_object grk_stream
Definition: grok.h:884
GRK_API bool GRK_CALLCONV grk_set_MCT(grk_cparameters *parameters, float *pEncodingMatrix, int32_t *p_dc_shift, uint32_t pNbComp)
Set the MCT matrix to use.
Definition: grok.cpp:328
struct _grk_image_comptparm grk_image_cmptparm
Image component parameters.
GRK_API bool GRK_CALLCONV grk_compress_end(grk_codec *codec)
End to compress the current image.
Definition: grok.cpp:468
GRK_API uint32_t GRK_CALLCONV grk_plugin_get_debug_state()
Get debug state of plugin.
Definition: grok.cpp:604
struct _grk_prec grk_precision
Precision.
GRK_API void GRK_CALLCONV grk_object_ref(grk_object *obj)
Increment ref count.
Definition: grok.cpp:92
struct _grk_plugin_decompress_callback_info grk_plugin_decompress_callback_info
GRK_API int32_t GRK_CALLCONV grk_plugin_batch_decompress(void)
Batch decompress.
Definition: grok.cpp:797
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Progression order.
struct _grk_object grk_object
Base Grok ref-counted object.
GRK_API bool GRK_CALLCONV grk_set_info_handler(grk_msg_callback p_callback, void *user_data)
Set info handler.
Definition: grok.cpp:114
struct _grk_raw_cparameters grk_raw_cparameters
GRK_API grk_codec *GRK_CALLCONV grk_decompress_create(GRK_CODEC_FORMAT format, grk_stream *stream)
Create J2K/JP2 decompression structure.
Definition: grok.cpp:218
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:660
GRK_API bool GRK_CALLCONV grk_decompress_init(grk_codec *codec, grk_dparameters *parameters)
Set up the decompressor with decompress parameters.
Definition: grok.cpp:250
GRK_API bool GRK_CALLCONV grk_compress(grk_codec *codec)
Encode an image into a JPEG 2000 code stream.
Definition: grok.cpp:455
struct _grk_image_meta grk_image_meta
GRK_API bool GRK_CALLCONV grk_compress_with_plugin(grk_codec *codec, grk_plugin_tile *tile)
Encode an image into a JPEG 2000 code stream using plugin.
Definition: grok.cpp:459
grk_object grk_codec
Definition: grok.h:855
GRK_API grk_image *GRK_CALLCONV grk_image_new(uint16_t numcmpts, grk_image_cmptparm *cmptparms, GRK_COLOR_SPACE clrspc, bool allocData)
Create image.
Definition: grok.cpp:188
#define GRK_J2K_MAXRLVLS
Maximum number of resolution levels authorized.
Definition: grok.h:91
struct _grk_palette_data grk_palette_data
Palette data.
GRK_API void GRK_CALLCONV grk_stream_set_read_function(grk_stream *stream, grk_stream_read_fn p_function)
Set the given function to be used as a read function.
Definition: grok.cpp:832
#define GRK_API
Definition: grok.h:47
GRK_API bool GRK_CALLCONV grk_decompress_read_header(grk_codec *codec, grk_header_info *header_info)
Decompress JPEG 2000 header.
Definition: grok.cpp:264
GRK_TILE_CACHE_STRATEGY
Definition: grok.h:389
@ GRK_TILE_CACHE_ALL
Definition: grok.h:391
@ GRK_TILE_CACHE_NONE
Definition: grok.h:390
struct _grk_component_mapping_comp grk_component_mapping_comp
Component mappings: component index, mapping type, palette column.
GRK_API const char *GRK_CALLCONV grk_version(void)
library version
Definition: grok.cpp:183
struct _grk_image_comp grk_image_comp
Image component.
struct _grk_raw_comp_cparameters grk_raw_comp_cparameters
GRK_API void GRK_CALLCONV grk_deinitialize()
De-initialize library.
Definition: grok.cpp:86
GRK_API void GRK_CALLCONV grk_stream_set_user_data(grk_stream *stream, void *data, grk_stream_free_user_data_fn p_function)
Set the given data to be used as a user data for the stream.
Definition: grok.cpp:855
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:676
GRK_API void GRK_CALLCONV grk_object_unref(grk_object *obj)
Definition: grok.cpp:100
grk_prec_mode
Precision mode.
Definition: grok.h:786
@ GRK_PREC_MODE_SCALE
Definition: grok.h:788
@ GRK_PREC_MODE_CLIP
Definition: grok.h:787
#define GRK_MAX_LAYERS
Definition: grok.h:82
GRK_API void GRK_CALLCONV grk_compress_set_default_params(grk_cparameters *parameters)
Set compressing parameters to default values, that means :
Definition: grok.cpp:403
struct _grk_plugin_precinct grk_plugin_precinct
Plugin precinct.
GRK_API grk_stream *GRK_CALLCONV grk_stream_new(size_t buffer_size, bool is_input)
Create an abstract stream.
Definition: grok.cpp:825
GRK_API grk_stream *GRK_CALLCONV grk_stream_create_mapped_file_stream(const char *fname, bool read_stream)
Create mapped file stream.
Definition: grok.cpp:543
struct grk_plugin_compress_user_callback_info grk_plugin_compress_user_callback_info
GRK_API bool GRK_CALLCONV grk_decompress_end(grk_codec *codec)
End decompression.
Definition: grok.cpp:307
_GRK_COLOR_SPACE
Supported color spaces.
Definition: grok.h:337
@ GRK_CLRSPC_SRGB
sRGB
Definition: grok.h:339
@ GRK_CLRSPC_EYCC
extended YCC
Definition: grok.h:342
@ GRK_CLRSPC_UNKNOWN
unknown
Definition: grok.h:338
@ GRK_CLRSPC_SYCC
standard YCC (YUV)
Definition: grok.h:341
@ GRK_CLRSPC_DEFAULT_CIE
default CIE LAB
Definition: grok.h:344
@ GRK_CLRSPC_ICC
ICC profile.
Definition: grok.h:346
@ GRK_CLRSPC_CMYK
CMYK.
Definition: grok.h:343
@ GRK_CLRSPC_GRAY
grayscale
Definition: grok.h:340
@ GRK_CLRSPC_CUSTOM_CIE
custom CIE LAB
Definition: grok.h:345
GRK_API grk_stream *GRK_CALLCONV grk_stream_create_file_stream(const char *fname, size_t buffer_size, bool is_read_stream)
Create stream from a file identified with its filename with a specific buffer size.
Definition: grok.cpp:495
GRK_API void GRK_CALLCONV grk_stream_set_write_function(grk_stream *stream, grk_stream_write_fn p_function)
Set the given function to be used as a write function.
Definition: grok.cpp:846
bool(* GRK_PLUGIN_COMPRESS_USER_CALLBACK)(grk_plugin_compress_user_callback_info *info)
Definition: grok.h:1580
GRK_API bool GRK_CALLCONV grk_plugin_is_batch_complete(void)
Check if batch job is complete.
Definition: grok.cpp:698
enum _GRK_COLOR_SPACE GRK_COLOR_SPACE
Supported color spaces.
#define GRK_PATH_LEN
Maximum allowed size for filenames.
Definition: grok.h:81
GRK_ENUM_COLOUR_SPACE
Definition: grok.h:351
@ GRK_ENUM_CLRSPC_ESRGB
Definition: grok.h:367
@ GRK_ENUM_CLRSPC_CMY
Definition: grok.h:358
@ GRK_ENUM_CLRSPC_EYCC
Definition: grok.h:371
@ GRK_ENUM_CLRSPC_CIEJAB
Definition: grok.h:366
@ GRK_ENUM_CLRSPC_GRAY
Definition: grok.h:364
@ GRK_ENUM_CLRSPC_CIE
Definition: grok.h:361
@ GRK_ENUM_CLRSPC_UNKNOWN
Definition: grok.h:352
@ GRK_ENUM_CLRSPC_YCBCR3
Definition: grok.h:356
@ GRK_ENUM_CLRSPC_ROMMRGB
Definition: grok.h:368
@ GRK_ENUM_CLRSPC_YPBPR60
Definition: grok.h:369
@ GRK_ENUM_CLRSPC_SRGB
Definition: grok.h:363
@ GRK_ENUM_CLRSPC_BILEVEL2
Definition: grok.h:362
@ GRK_ENUM_CLRSPC_SYCC
Definition: grok.h:365
@ GRK_ENUM_CLRSPC_PHOTO_YCC
Definition: grok.h:357
@ GRK_ENUM_CLRSPC_YCBCR1
Definition: grok.h:354
@ GRK_ENUM_CLRSPC_CMYK
Definition: grok.h:359
@ GRK_ENUM_CLRSPC_YCCK
Definition: grok.h:360
@ GRK_ENUM_CLRSPC_YPBPR50
Definition: grok.h:370
@ GRK_ENUM_CLRSPC_BILEVEL1
Definition: grok.h:353
@ GRK_ENUM_CLRSPC_YCBCR2
Definition: grok.h:355
GRK_API bool GRK_CALLCONV grk_set_warning_handler(grk_msg_callback p_callback, void *user_data)
Set warning handler.
Definition: grok.cpp:121
struct _grk_dparameters grk_dparameters
Core decompress parameters.
GRK_API bool GRK_CALLCONV grk_compress_start(grk_codec *codec)
Start compressing current image.
Definition: grok.cpp:446
struct grk_color grk_color
ICC profile, palette, channel definition.
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:762
GRK_API void GRK_CALLCONV grk_image_single_component_data_free(grk_image_comp *image)
Deallocate data for single image component.
Definition: grok.cpp:208
GRK_SUPPORTED_FILE_FMT
Definition: grok.h:66
@ GRK_TIF_FMT
Definition: grok.h:74
@ GRK_PAM_FMT
Definition: grok.h:72
@ GRK_RAWL_FMT
Definition: grok.h:77
@ GRK_JPG_FMT
Definition: grok.h:78
@ GRK_PNG_FMT
Definition: grok.h:76
@ GRK_PGX_FMT
Definition: grok.h:71
@ GRK_BMP_FMT
Definition: grok.h:73
@ GRK_PXM_FMT
Definition: grok.h:70
@ GRK_UNK_FMT
Definition: grok.h:67
@ GRK_JP2_FMT
Definition: grok.h:69
@ GRK_J2K_FMT
Definition: grok.h:68
@ GRK_RAW_FMT
Definition: grok.h:75
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:317
GRK_API grk_image *GRK_CALLCONV grk_decompress_get_composited_image(grk_codec *codec)
Get decompressed composite image.
Definition: grok.cpp:367
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:779
bool(* grk_stream_seek_fn)(uint64_t numBytes, void *user_data)
Definition: grok.h:876
struct _grk_decompress_params grk_decompress_parameters
Decompress parameters.
GRK_API grk_stream *GRK_CALLCONV grk_stream_create_mem_stream(uint8_t *buf, size_t buffer_len, bool ownsBuffer, bool is_read_stream)
Create stream from buffer.
Definition: grok.cpp:538
GRK_API bool GRK_CALLCONV grk_decompress_tile(grk_codec *codec, uint16_t tileIndex)
Decompress a specific tile.
Definition: grok.cpp:296
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:1621
struct _grk_plugin_band grk_plugin_band
Plugin band.
_GRK_CODEC_FORMAT
Supported codecs.
Definition: grok.h:378
@ GRK_CODEC_J2K
JPEG 2000 code stream : read/write.
Definition: grok.h:380
@ GRK_CODEC_UNKNOWN
place-holder
Definition: grok.h:379
@ GRK_CODEC_JP2
JP2 file format : read/write.
Definition: grok.h:381
struct _grk_plugin_tile grk_plugin_tile
Plugin tile.
#define GRK_CALLCONV
Definition: grok.h:49
GRK_API grk_codec *GRK_CALLCONV grk_compress_create(GRK_CODEC_FORMAT format, grk_stream *stream)
Creates a J2K/JP2 compression structure.
Definition: grok.cpp:380
GRK_API bool GRK_CALLCONV grk_set_error_handler(grk_msg_callback p_callback, void *user_data)
Set error handler.
Definition: grok.cpp:127
size_t(* grk_stream_write_fn)(void *buffer, size_t numBytes, void *user_data)
Definition: grok.h:872
GRK_API grk_image_meta *GRK_CALLCONV grk_image_meta_new(void)
Definition: grok.cpp:194
void(* grk_stream_free_user_data_fn)(void *user_data)
Definition: grok.h:880
GRK_API grk_image *GRK_CALLCONV grk_decompress_get_tile_image(grk_codec *codec, uint16_t tileIndex)
Get decompressed tile image.
Definition: grok.cpp:357
GRK_API void GRK_CALLCONV grk_stream_set_seek_function(grk_stream *stream, grk_stream_seek_fn p_function)
Set the given function to be used as a seek function, the stream is then seekable.
Definition: grok.cpp:840
#define GRK_NUM_ASOC_BOXES_SUPPORTED
Definition: grok.h:385
_GRK_PROG_ORDER
Progression order.
Definition: grok.h:307
@ GRK_RPCL
resolution-precinct-component-layer order
Definition: grok.h:311
@ GRK_CPRL
component-precinct-resolution-layer order
Definition: grok.h:313
@ GRK_RLCP
resolution-layer-component-precinct order
Definition: grok.h:310
@ GRK_PROG_UNKNOWN
place-holder
Definition: grok.h:308
@ GRK_LRCP
layer-resolution-component-precinct order
Definition: grok.h:309
@ GRK_NUM_PROGRESSION_ORDERS
Definition: grok.h:314
@ GRK_PCRL
precinct-component-resolution-layer order
Definition: grok.h:312
GRK_API bool GRK_CALLCONV grk_decompress_set_window(grk_codec *codec, uint32_t start_x, uint32_t start_y, uint32_t end_x, uint32_t end_y)
Set the given area to be decompressed.
Definition: grok.cpp:273
struct _grk_plugin_pass grk_plugin_pass
Plugin pass.
struct _grk_header_info grk_header_info
Header info.
int32_t(* grk_plugin_decompress_callback)(grk_plugin_decompress_callback_info *info)
Definition: grok.h:1647
GRK_API bool GRK_CALLCONV grk_compress_init(grk_codec *codec, grk_cparameters *parameters, grk_image *image)
Set up the compressor parameters using the current image and user parameters.
Definition: grok.cpp:434
struct grk_asoc grk_asoc
GRK_API bool GRK_CALLCONV grk_initialize(const char *pluginPath, uint32_t numthreads)
Initialize library.
Definition: grok.cpp:73
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:624
size_t(* grk_stream_read_fn)(void *buffer, size_t numBytes, void *user_data)
Definition: grok.h:867
GRK_API void GRK_CALLCONV grk_decompress_set_default_params(grk_dparameters *parameters)
Initialize decompress parameters with default values.
Definition: grok.cpp:242
HWY_NORETURN void int const char * format
Definition: base.h:665
message_info info
Definition: ojph_message.cpp:50
Channel definitions and number of definitions.
Definition: grok.h:629
uint16_t num_channel_descriptions
Definition: grok.h:631
grk_channel_description * descriptions
Definition: grok.h:630
Channel definition: channel index, type, association.
Definition: grok.h:619
uint16_t typ
Definition: grok.h:621
uint16_t asoc
Definition: grok.h:622
uint16_t cn
Definition: grok.h:620
Component mappings: component index, mapping type, palette column.
Definition: grok.h:638
uint8_t palette_column
Definition: grok.h:641
uint8_t mapping_type
Definition: grok.h:640
uint16_t component_index
Definition: grok.h:639
Compress parameters.
Definition: grok.h:489
uint32_t cblockw_init
initial code block width (default to 64)
Definition: grok.h:528
uint8_t numgbits
Definition: grok.h:518
char outfile[GRK_PATH_LEN]
output file name
Definition: grok.h:552
bool allocationByRateDistoration
rate control allocation by rate/distortion curve
Definition: grok.h:503
GRK_PROG_ORDER prog_order
progression order (default is LRCP)
Definition: grok.h:520
uint16_t comment_len[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:512
uint32_t repeats
Definition: grok.h:609
uint32_t numThreads
Definition: grok.h:605
bool verbose
Definition: grok.h:612
uint32_t image_offset_x0
subimage compressing: origin image offset in x direction
Definition: grok.h:554
uint64_t max_cs_size
Maximum size (in bytes) for the whole code stream.
Definition: grok.h:586
grk_raw_cparameters raw_cp
Definition: grok.h:565
uint8_t numresolution
number of resolutions
Definition: grok.h:526
uint32_t subsampling_dx
subsampling value for dx
Definition: grok.h:558
uint32_t image_offset_y0
subimage compressing: origin image offset in y direction
Definition: grok.h:556
bool isHT
Definition: grok.h:534
GRK_SUPPORTED_FILE_FMT decod_format
input file format
Definition: grok.h:562
uint8_t newTilePartProgressionDivider
new tile part progression divider
Definition: grok.h:574
uint32_t cblockh_init
initial code block height (default to 64)
Definition: grok.h:530
GRK_RATE_CONTROL_ALGORITHM rateControlAlgorithm
Definition: grok.h:604
bool allocationByQuality
rate control allocation by fixed_PSNR quality
Definition: grok.h:508
uint32_t roi_shift
region of interest: upshift value
Definition: grok.h:542
bool tile_size_on
size of tile: tile_size_on = false (not in argument) or = true (in argument)
Definition: grok.h:491
uint32_t t_height
YTsiz.
Definition: grok.h:499
bool write_capture_resolution_from_file
Definition: grok.h:593
bool enableTilePartGeneration
Tile part generation.
Definition: grok.h:572
uint32_t res_spec
Definition: grok.h:544
uint8_t mct
MCT (multiple component transform)
Definition: grok.h:576
uint16_t numlayers
number of layers
Definition: grok.h:501
int32_t deviceId
Definition: grok.h:606
GRK_SUPPORTED_FILE_FMT cod_format
output file format
Definition: grok.h:564
double capture_resolution_from_file[2]
Definition: grok.h:594
uint32_t max_comp_size
Maximum size (in bytes) for each component.
Definition: grok.h:570
bool irreversible
1 : use the irreversible DWT 9-7, 0 : use lossless compression (default)
Definition: grok.h:537
uint32_t t_width
XTsiz.
Definition: grok.h:497
bool write_display_resolution
Definition: grok.h:599
uint8_t cblk_sty
code block style
Definition: grok.h:532
uint8_t csty
csty : coding style
Definition: grok.h:516
uint32_t prch_init[GRK_J2K_MAXRLVLS]
initial precinct height
Definition: grok.h:548
bool is_binary_comment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:513
uint16_t rsiz
RSIZ value To be used to combine GRK_PROFILE_*, GRK_EXTENSION_* and (sub)levels values.
Definition: grok.h:589
char infile[GRK_PATH_LEN]
input file name
Definition: grok.h:550
double layer_distortion[GRK_MAX_LAYERS]
layer PSNR values
Definition: grok.h:510
void * mct_data
Naive implementation of MCT restricted to a single reversible array based compressing without offset ...
Definition: grok.h:579
uint32_t tx0
XTOsiz.
Definition: grok.h:493
char * comment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:511
bool write_capture_resolution
Definition: grok.h:596
uint32_t subsampling_dy
subsampling value for dy
Definition: grok.h:560
bool writeTLM
Definition: grok.h:611
uint32_t prcw_init[GRK_J2K_MAXRLVLS]
initial precinct width
Definition: grok.h:546
size_t num_comments
Definition: grok.h:514
uint16_t framerate
Definition: grok.h:590
double display_resolution[2]
Definition: grok.h:600
bool writePLT
Definition: grok.h:610
int32_t roi_compno
region of interest: affected component in [0..3]; -1 indicates no ROI
Definition: grok.h:540
uint32_t ty0
YTOsiz.
Definition: grok.h:495
uint32_t duration
Definition: grok.h:607
double layer_rate[GRK_MAX_LAYERS]
layers rates expressed as compression ratios.
Definition: grok.h:506
uint32_t kernelBuildOptions
Definition: grok.h:608
grk_progression progression[GRK_J2K_MAXRLVLS]
progressions
Definition: grok.h:522
uint32_t numpocs
number of progression order changes (POCs), default to 0
Definition: grok.h:524
double capture_resolution[2]
Definition: grok.h:597
Decompress parameters.
Definition: grok.h:806
int32_t deviceId
Definition: grok.h:847
grk_precision * precision
Definition: grok.h:833
uint32_t numThreads
Definition: grok.h:852
GRK_SUPPORTED_FILE_FMT cod_format
output file format 0: PGX, 1: PxM, 2: BMP
Definition: grok.h:816
uint32_t kernelBuildOptions
Definition: grok.h:849
uint32_t DA_y0
Decompress window up boundary.
Definition: grok.h:824
char infile[GRK_PATH_LEN]
input file name
Definition: grok.h:810
uint32_t compressionLevel
Definition: grok.h:846
bool force_rgb
Definition: grok.h:836
uint32_t compression
Definition: grok.h:843
GRK_SUPPORTED_FILE_FMT decod_format
input file format 0: J2K, 1: JP2
Definition: grok.h:814
char indexfilename[GRK_PATH_LEN]
index file name
Definition: grok.h:818
uint32_t nb_precision
Definition: grok.h:834
uint32_t repeats
Definition: grok.h:850
uint32_t DA_x0
Decompress window left boundary.
Definition: grok.h:820
bool upsample
Definition: grok.h:838
uint32_t nb_tile_to_decompress
Number of tiles to decompress.
Definition: grok.h:832
uint16_t tileIndex
tile number of the decompressed tile
Definition: grok.h:830
bool m_verbose
Verbose mode.
Definition: grok.h:828
bool serialize_xml
Definition: grok.h:842
uint32_t duration
Definition: grok.h:848
uint32_t DA_y1
Decompress window bottom boundary.
Definition: grok.h:826
uint32_t DA_x1
Decompress window right boundary.
Definition: grok.h:822
grk_dparameters core
core library parameters
Definition: grok.h:808
bool split_pnm
Definition: grok.h:840
bool verbose
Definition: grok.h:851
char outfile[GRK_PATH_LEN]
output file name
Definition: grok.h:812
Core decompress parameters.
Definition: grok.h:740
GRK_SUPPORTED_FILE_FMT decod_format
input file format
Definition: grok.h:761
GRK_TILE_CACHE_STRATEGY tileCacheStrategy
Definition: grok.h:779
uint16_t cp_layer
Set the maximum number of quality layers to decompress.
Definition: grok.h:755
uint32_t nb_tile_to_decompress
Number of tiles to decompress.
Definition: grok.h:777
GRK_SUPPORTED_FILE_FMT cod_format
output file format
Definition: grok.h:763
uint32_t DA_x1
Decompress window right boundary.
Definition: grok.h:767
uint32_t DA_x0
Decompress window left boundary.
Definition: grok.h:765
char outfile[GRK_PATH_LEN]
output file name
Definition: grok.h:759
uint32_t DA_y1
Decompress window bottom boundary.
Definition: grok.h:771
bool m_verbose
Verbose mode.
Definition: grok.h:773
uint32_t DA_y0
Decompress window up boundary.
Definition: grok.h:769
uint16_t tileIndex
tile number of the decompressed tile
Definition: grok.h:775
uint8_t cp_reduce
Set the number of highest resolution levels to be discarded.
Definition: grok.h:748
char infile[GRK_PATH_LEN]
input file name
Definition: grok.h:757
uint32_t flags
Definition: grok.h:778
Header info.
Definition: grok.h:681
uint32_t cblockh_init
initial code block height, default to 64
Definition: grok.h:685
uint16_t comment_len[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:728
uint32_t num_asocs
Definition: grok.h:732
char * comment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:727
uint32_t t_width
XTsiz.
Definition: grok.h:712
uint32_t numresolutions
number of resolutions
Definition: grok.h:694
uint32_t prch_init[GRK_J2K_MAXRLVLS]
initial precinct height
Definition: grok.h:706
size_t xml_data_len
Definition: grok.h:725
size_t num_comments
Definition: grok.h:726
uint8_t csty
Definition: grok.h:698
uint32_t t_grid_height
tile grid height
Definition: grok.h:718
grk_asoc asocs[GRK_NUM_ASOC_BOXES_SUPPORTED]
Definition: grok.h:731
uint32_t tx0
XTOsiz.
Definition: grok.h:708
uint32_t ty0
YTOsiz.
Definition: grok.h:710
uint32_t cblockw_init
initial code block width, default to 64
Definition: grok.h:683
uint16_t rsiz
RSIZ value To be used to combine GRK_PROFILE_*, GRK_EXTENSION_* and (sub)levels values.
Definition: grok.h:692
uint32_t mct
multi-component transform identifier
Definition: grok.h:689
uint32_t prcw_init[GRK_J2K_MAXRLVLS]
initial precinct width
Definition: grok.h:704
uint32_t t_height
YTsiz.
Definition: grok.h:714
uint8_t cblk_sty
Definition: grok.h:702
uint32_t t_grid_width
tile grid width
Definition: grok.h:716
uint8_t * xml_data
Definition: grok.h:724
bool isBinaryComment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: grok.h:729
bool irreversible
1 : use the irreversible DWT 9-7, 0 : use lossless compression (default)
Definition: grok.h:687
uint16_t numlayers
number of layers
Definition: grok.h:720
Image component.
Definition: grok.h:919
uint32_t dx
XRsiz: horizontal separation of a sample of with component with respect to the reference grid.
Definition: grok.h:923
uint32_t h
data height
Definition: grok.h:932
GRK_COMPONENT_ASSOC association
Definition: grok.h:945
GRK_COMPONENT_TYPE type
Definition: grok.h:944
grk_object obj
Definition: grok.h:920
bool sgnd
Definition: grok.h:941
uint32_t w
data width
Definition: grok.h:928
uint8_t prec
precision
Definition: grok.h:940
uint16_t Ycrg
Definition: grok.h:938
uint32_t dy
YRsiz: vertical separation of a sample of with component with respect to the reference grid.
Definition: grok.h:926
int32_t * data
image component data
Definition: grok.h:943
uint32_t x0
x component offset compared to the whole image
Definition: grok.h:934
uint16_t Xcrg
Definition: grok.h:938
uint32_t y0
y component offset compared to the whole image
Definition: grok.h:936
uint32_t stride
data stride
Definition: grok.h:930
Image component parameters.
Definition: grok.h:988
uint32_t h
data height
Definition: grok.h:1000
uint32_t y0
y component offset compared to the whole image
Definition: grok.h:1004
uint32_t dx
XRsiz: horizontal separation of a sample of component with respect to the reference grid.
Definition: grok.h:991
uint8_t prec
precision
Definition: grok.h:1006
uint32_t stride
Definition: grok.h:998
uint32_t x0
x component offset compared to the whole image
Definition: grok.h:1002
bool sgnd
true if data is signed
Definition: grok.h:1008
uint32_t w
data width
Definition: grok.h:996
uint32_t dy
YRsiz: vertical separation of a sample of component with respect to the reference grid.
Definition: grok.h:994
Definition: grok.h:950
grk_color color
Definition: grok.h:952
uint8_t * xmp_buf
Definition: grok.h:955
grk_object obj
Definition: grok.h:951
size_t xmp_len
Definition: grok.h:956
size_t iptc_len
Definition: grok.h:954
uint8_t * iptc_buf
Definition: grok.h:953
Definition: grok.h:960
bool has_capture_resolution
Definition: grok.h:976
uint16_t numcomps
number of components in the image
Definition: grok.h:973
uint32_t y0
YOsiz: vertical offset from the origin of the reference grid to the top side of the image area.
Definition: grok.h:967
GRK_COLOR_SPACE color_space
Definition: grok.h:974
bool color_applied
Definition: grok.h:975
grk_image_comp * comps
Definition: grok.h:981
uint32_t x0
XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area.
Definition: grok.h:964
grk_object obj
Definition: grok.h:961
bool has_display_resolution
Definition: grok.h:978
double display_resolution[2]
Definition: grok.h:979
uint32_t y1
Ysiz: height of the reference grid.
Definition: grok.h:971
double capture_resolution[2]
Definition: grok.h:977
grk_image_meta * meta
Definition: grok.h:980
uint32_t x1
Xsiz: width of the reference grid.
Definition: grok.h:969
Base Grok ref-counted object.
Definition: grok.h:408
void * wrapper
Definition: grok.h:409
Palette data.
Definition: grok.h:648
grk_component_mapping_comp * component_mapping
Definition: grok.h:651
uint8_t num_channels
Definition: grok.h:652
int32_t * lut
Definition: grok.h:649
uint16_t num_entries
Definition: grok.h:650
bool * channel_sign
Definition: grok.h:653
uint8_t * channel_prec
Definition: grok.h:654
Plugin band.
Definition: grok.h:1057
float stepsize
Definition: grok.h:1061
uint8_t orientation
Definition: grok.h:1058
uint64_t numPrecincts
Definition: grok.h:1059
grk_plugin_precinct ** precincts
Definition: grok.h:1060
Plugin code block.
Definition: grok.h:1029
uint8_t * compressedData
Definition: grok.h:1036
uint32_t y0
Definition: grok.h:1032
size_t numPasses
Definition: grok.h:1039
unsigned int sortedIndex
Definition: grok.h:1041
uint8_t numBitPlanes
Definition: grok.h:1038
grk_plugin_pass passes[67]
Definition: grok.h:1040
uint32_t x0
Definition: grok.h:1032
unsigned int * contextStream
Definition: grok.h:1033
uint32_t y1
Definition: grok.h:1032
uint32_t numPix
Definition: grok.h:1035
uint32_t x1
Definition: grok.h:1032
uint32_t compressedDataLength
Definition: grok.h:1037
grk_codec * codec
Definition: grok.h:1634
GRK_SUPPORTED_FILE_FMT decod_format
Definition: grok.h:1630
uint32_t full_image_y0
Definition: grok.h:1643
unsigned int error_code
Definition: grok.h:1640
grk_decompress_parameters * decompressor_parameters
Definition: grok.h:1636
grk_header_info header_info
Definition: grok.h:1635
GRK_SUPPORTED_FILE_FMT cod_format
Definition: grok.h:1632
size_t deviceId
Definition: grok.h:1625
grk_plugin_tile * tile
Definition: grok.h:1639
uint32_t full_image_x0
Definition: grok.h:1642
void * user_data
Definition: grok.h:1644
bool plugin_owns_image
Definition: grok.h:1638
uint32_t decompress_flags
Definition: grok.h:1641
const char * output_file_name
Definition: grok.h:1628
GROK_INIT_DECOMPRESSORS init_decompressors_func
Definition: grok.h:1626
grk_stream * stream
Definition: grok.h:1633
const char * input_file_name
Definition: grok.h:1627
grk_image * image
Definition: grok.h:1637
Definition: grok.h:1556
bool verbose
Definition: grok.h:1558
int32_t deviceId
Definition: grok.h:1557
Definition: grok.h:1508
const char * pluginPath
Definition: grok.h:1509
Plugin pass.
Definition: grok.h:1019
size_t rate
Definition: grok.h:1021
size_t length
Definition: grok.h:1022
double distortionDecrease
Definition: grok.h:1020
Plugin precinct.
Definition: grok.h:1048
grk_plugin_code_block ** blocks
Definition: grok.h:1050
uint64_t numBlocks
Definition: grok.h:1049
Plugin resolution.
Definition: grok.h:1068
size_t numBands
Definition: grok.h:1070
size_t level
Definition: grok.h:1069
grk_plugin_band ** band
Definition: grok.h:1071
Plugin tile.
Definition: grok.h:1096
uint32_t decompress_flags
Definition: grok.h:1097
grk_plugin_tile_component ** tileComponents
Definition: grok.h:1099
size_t numComponents
Definition: grok.h:1098
Precision.
Definition: grok.h:795
uint8_t prec
Definition: grok.h:796
grk_precision_mode mode
Definition: grok.h:797
Progression order change.
Definition: grok.h:417
uint16_t comp_temp
Definition: grok.h:457
uint32_t tx1
Definition: grok.h:437
uint32_t tp_txE
Definition: grok.h:449
uint8_t res_temp
Definition: grok.h:456
GRK_PROG_ORDER specifiedCompressionPocProg
Progression order enum.
Definition: grok.h:429
uint32_t tx0
Start and end values for tile width and height.
Definition: grok.h:436
uint16_t compE
Definition: grok.h:424
uint8_t resS
Definition: grok.h:421
uint64_t prec_temp
Definition: grok.h:458
uint32_t tp_tyE
Definition: grok.h:451
uint64_t precE
Definition: grok.h:426
uint64_t precS
Definition: grok.h:425
uint32_t ty0
Definition: grok.h:438
uint32_t ty1
Definition: grok.h:439
uint32_t ty0_temp
Definition: grok.h:460
uint16_t tpCompE
Definition: grok.h:445
uint32_t tp_tyS
Definition: grok.h:450
uint32_t dy
Definition: grok.h:453
GRK_PROG_ORDER progression
Definition: grok.h:430
uint32_t dx
Definition: grok.h:452
uint16_t layE
Definition: grok.h:420
uint16_t layS
progression order bounds specified by POC
Definition: grok.h:419
char progressionString[5]
Progression order string.
Definition: grok.h:432
uint8_t tpResE
Definition: grok.h:443
uint32_t tx0_temp
Definition: grok.h:459
uint32_t tileno
Tile number.
Definition: grok.h:434
uint16_t lay_temp
tile part temporary values initialized by pi_create_encode
Definition: grok.h:455
uint16_t tpLayE
progression order bounds initialized in pi_create_compress
Definition: grok.h:441
uint64_t tpPrecE
Definition: grok.h:446
uint16_t tpCompS
Definition: grok.h:444
uint16_t compS
Definition: grok.h:423
uint32_t tp_txS
tile bounds initialized by pi_create_compress
Definition: grok.h:448
uint8_t resE
Definition: grok.h:422
uint8_t tpResS
Definition: grok.h:442
Definition: grok.h:466
uint32_t dx
Definition: grok.h:467
uint32_t dy
subsampling in X direction
Definition: grok.h:468
Definition: grok.h:475
uint8_t prec
number of components of the raw image
Definition: grok.h:479
uint32_t width
Definition: grok.h:476
uint16_t numcomps
height of the raw image
Definition: grok.h:478
grk_raw_comp_cparameters * comps
signed/unsigned raw image
Definition: grok.h:481
bool sgnd
bit depth of the raw image
Definition: grok.h:480
uint32_t height
width of the raw image
Definition: grok.h:477
Definition: grok.h:670
const char * label
Definition: grok.h:672
uint32_t xml_len
Definition: grok.h:674
uint8_t * xml
Definition: grok.h:673
uint32_t level
Definition: grok.h:671
ICC profile, palette, channel definition.
Definition: grok.h:661
bool has_colour_specification_box
Definition: grok.h:666
uint32_t icc_profile_len
Definition: grok.h:663
grk_channel_definition * channel_definition
Definition: grok.h:664
uint8_t * icc_profile_buf
Definition: grok.h:662
grk_palette_data * palette
Definition: grok.h:665
bool outputFileNameIsRelative
Definition: grok.h:1569
grk_cparameters * compressor_parameters
Definition: grok.h:1571
grk_image * image
Definition: grok.h:1572
grk_plugin_tile * tile
Definition: grok.h:1573
const char * output_file_name
Definition: grok.h:1570
bool transferExifTags
Definition: grok.h:1577
size_t compressBufferLen
Definition: grok.h:1575
unsigned int error_code
Definition: grok.h:1576
const char * input_file_name
Definition: grok.h:1568
uint8_t * compressBuffer
Definition: grok.h:1574
Plugin tile component.
Definition: grok.h:1078
grk_plugin_resolution ** resolutions
Definition: grok.h:1080
size_t numResolutions
Definition: grok.h:1079