Grok 10.0.5
CodingParams.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016-2023 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#include "Quantizer.h"
25
26namespace grk
27{
38
48
52struct TileComponentCodingParams
53{
54 TileComponentCodingParams();
56 uint8_t csty;
60 uint8_t cblkw;
62 uint8_t cblkh;
64 uint8_t cblk_sty;
66 uint8_t qmfbid;
67 // true if quantization marker has been read for this component,
68 // false otherwise
70 // true if quantization marker was read from QCC otherwise false
71 bool fromQCC;
72 // true if quantization marker was read from tile header
75 uint8_t qntsty;
78 // number of step sizes read from QCC marker
79 uint8_t numStepSizes;
81 uint8_t numgbits;
83 uint8_t roishift;
90};
91
95struct grk_mct_data
96{
97 J2K_MCT_ELEMENT_TYPE element_type_;
98 J2K_MCT_ARRAY_TYPE array_type_;
99 uint32_t index_;
100 uint8_t* data_;
101 uint32_t data_size_;
102};
103
107struct grk_simple_mcc_decorrelation_data
108{
109 uint32_t index_;
110 uint32_t nb_comps_;
111 grk_mct_data* decorrelation_array_;
112 grk_mct_data* offset_array_;
113 uint32_t is_irreversible_ : 1;
114};
115
121struct TileCodingParams
122{
123 TileCodingParams();
124 ~TileCodingParams();
125
126 bool advanceTilePartCounter(uint16_t tileIndex, uint8_t tilePartIndex);
127 bool copy(const TileCodingParams* rhs, const GrkImage* image);
128 void setIsHT(bool ht, bool reversible, uint8_t guardBits);
129 bool isHT(void);
130 uint32_t getNumProgressions(void);
131 bool hasPoc(void);
132
134 uint8_t csty;
138 uint16_t numlayers;
141 uint8_t mct;
143 double rates[maxCompressLayersGRK];
145 uint32_t numpocs;
151 grk_ppx* ppt_markers;
153 uint8_t* ppt_data;
155 uint8_t* ppt_buffer;
159 size_t ppt_len;
161 double distortion[maxCompressLayersGRK];
162 // quantization style as read from main QCD marker
164 // number of step sizes as read from main QCD marker
167 TileComponentCodingParams* tccps;
168 // current tile part index, based on count of tile parts
169 // (-1 if never incremented)
170 // NOTES:
171 // 1. tile parts must appear in code stream in strictly increasing
172 // order
173 // 2. tile part index must be <= 255
177 SparseBuffer* compressedTileData_;
179 double* mct_norms;
185 grk_mct_data* mct_records_;
191 grk_simple_mcc_decorrelation_data* mcc_records_;
197 bool cod;
199 bool ppt;
200 Quantizer* qcd_;
201
202 private:
203 bool ht_;
204};
205
206struct EncodingParams
207{
221 /* write plt marker */
223 /* write TLM marker */
225 /* rate control algorithm */
227};
228
229struct DecodingParams
230{
233 uint8_t reduce_;
236 uint16_t layer_;
237
239};
240
244struct CodingParams
245{
246 CodingParams();
247 ~CodingParams();
248 grk_rect32 getTileBounds(const GrkImage* p_image, uint32_t tile_x, uint32_t tile_y) const;
249
251 uint16_t rsiz;
252 /* Pcap */
253 uint32_t pcap;
254 /* Ccap */
255 uint16_t ccap[32];
257 uint32_t tx0;
259 uint32_t ty0;
261 uint32_t t_width;
263 uint32_t t_height;
269 // note: maximum number of tiles is 65535
271 uint16_t t_grid_width;
274 PPMMarker* ppm_marker;
276 TileCodingParams* tcps;
277 union
278 {
279 DecodingParams dec_;
280 EncodingParams enc_;
281 } coding_params_;
285};
286
306
307class CodeStreamDecompress;
308
309struct DecompressorState
310{
311 DecompressorState();
312 bool findNextSOT(CodeStreamDecompress* codeStream);
313 uint16_t getState(void);
314 void setState(uint16_t state);
315 void orState(uint16_t state);
316 void andState(uint16_t state);
317 void setComplete(uint16_t tileIndex);
318
319 // store decoding parameters common to all tiles (information
320 // like COD, COC and RGN in main header)
321 TileCodingParams* default_tcp_;
322
324
333
334 private:
337 uint16_t state_;
338};
339
340struct CompressorState
341{
342 CompressorState() : total_tile_parts_(0) {}
345 uint16_t total_tile_parts_; /* numTilePartsTotal */
346};
347
348} // namespace grk
bool wholeTileDecompress_
Definition CodingParams.h:284
uint32_t precWidthExp[GRK_J2K_MAXRLVLS]
precinct width (power of 2 exponent, < 16)
Definition CodingParams.h:85
uint32_t main_qcd_numStepSizes
Definition CodingParams.h:165
uint8_t qntsty
quantisation style
Definition CodingParams.h:75
uint32_t nb_max_mct_records_
the max number of mct records.
Definition CodingParams.h:189
size_t num_comments
comments
Definition CodingParams.h:265
uint32_t newTilePartProgressionPosition
Position of tile part flag in progression order.
Definition CodingParams.h:212
uint32_t nb_max_mcc_records_
the max number of mct records.
Definition CodingParams.h:195
uint8_t numresolutions
number of resolutions
Definition CodingParams.h:58
TileCodingParams * default_tcp_
Definition CodingParams.h:321
uint8_t reduce_
if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decompressed to...
Definition CodingParams.h:233
double distortion[maxCompressLayersGRK]
fixed_quality
Definition CodingParams.h:161
grk_mct_data * offset_array_
Definition CodingParams.h:112
J2K_MCT_ELEMENT_TYPE element_type_
Definition CodingParams.h:97
uint64_t lastSotReadPosition
Position of the last SOT marker read.
Definition CodingParams.h:326
bool allocationByFixedQuality_
allocation by fixed_quality
Definition CodingParams.h:218
TileCodingParams * tcps
tile coding parameters
Definition CodingParams.h:276
grk_mct_data * mct_records_
mct records
Definition CodingParams.h:185
uint8_t cblkw
log2(code-blocks width)
Definition CodingParams.h:60
uint8_t csty
coding style
Definition CodingParams.h:56
uint8_t * ppt_data
packet header store there for future use in t2_decode_packet
Definition CodingParams.h:153
uint32_t precHeightExp[GRK_J2K_MAXRLVLS]
precinct height (power of 2 exponent, < 16)
Definition CodingParams.h:87
uint32_t index_
Definition CodingParams.h:99
size_t ppt_data_size
Number of bytes stored inside ppt_data.
Definition CodingParams.h:157
uint16_t ccap[32]
Definition CodingParams.h:255
uint8_t roishift
Region Of Interest shift.
Definition CodingParams.h:83
bool quantizationMarkerSet
Definition CodingParams.h:69
uint32_t t_width
XTsiz.
Definition CodingParams.h:261
uint16_t t_grid_height
number of tiles in height
Definition CodingParams.h:273
uint32_t pcap
Definition CodingParams.h:253
uint8_t tilePartCounter_
Definition CodingParams.h:174
uint8_t numStepSizes
Definition CodingParams.h:79
uint8_t * data_
Definition CodingParams.h:100
DecodingParams dec_
Definition CodingParams.h:279
uint32_t tx0
XTOsiz.
Definition CodingParams.h:257
bool isBinaryComment[GRK_NUM_COMMENTS_SUPPORTED]
Definition CodingParams.h:268
EncodingParams enc_
Definition CodingParams.h:280
uint32_t nb_mct_records_
the number of mct records.
Definition CodingParams.h:187
uint32_t nb_comps_
Definition CodingParams.h:110
double * mct_norms
compressing norms
Definition CodingParams.h:179
uint16_t numLayersToDecompress
Definition CodingParams.h:139
GRK_PROG_ORDER prg
progression order
Definition CodingParams.h:136
bool cod
If cod == true --> there was a COD marker for the present tile.
Definition CodingParams.h:197
uint16_t total_tile_parts_
Total num of tile parts in whole image = num tiles* num tileparts in each tile.
Definition CodingParams.h:345
float * mct_coding_matrix_
the mct coding matrix
Definition CodingParams.h:183
uint8_t numgbits
number of guard bits
Definition CodingParams.h:81
uint32_t nb_mcc_records_
the number of mct records.
Definition CodingParams.h:193
uint32_t t_height
YTsiz.
Definition CodingParams.h:263
grk_progression progressionOrderChange[GRK_J2K_MAXRLVLS]
progression order changes
Definition CodingParams.h:147
uint32_t ty0
YTOsiz.
Definition CodingParams.h:259
grk_mct_data * decorrelation_array_
Definition CodingParams.h:111
bool ht_
Definition CodingParams.h:203
size_t max_comp_size_
Maximum rate for each component.
Definition CodingParams.h:210
TileComponentCodingParams * tccps
tile-component coding parameters
Definition CodingParams.h:167
bool fromTileHeader
Definition CodingParams.h:73
uint32_t main_qcd_qntsty
Definition CodingParams.h:163
uint32_t data_size_
Definition CodingParams.h:101
uint16_t rsiz
Rsiz.
Definition CodingParams.h:251
uint32_t randomAccessFlags_
Definition CodingParams.h:238
TileLengthMarkers * tlm_markers
Definition CodingParams.h:282
bool allocationByRateDistortion_
allocation by rate/distortion
Definition CodingParams.h:216
bool ppt
If ppt == true --> there was a PPT marker for the present tile.
Definition CodingParams.h:199
uint16_t t_grid_width
number of tiles in width
Definition CodingParams.h:271
uint32_t is_irreversible_
Definition CodingParams.h:113
uint16_t numlayers
number of layers
Definition CodingParams.h:138
SparseBuffer * compressedTileData_
Definition CodingParams.h:177
Quantizer * qcd_
Definition CodingParams.h:200
bool lastTilePartInCodeStream
Indicate that the current tile-part is assumed to be the last tile part of the code stream.
Definition CodingParams.h:332
uint8_t cblk_sty
code-block mode
Definition CodingParams.h:64
grk_stepsize stepsizes[GRK_J2K_MAXBANDS]
stepsizes used for quantization
Definition CodingParams.h:77
float * mct_decoding_matrix_
the mct decoding matrix
Definition CodingParams.h:181
double rates[maxCompressLayersGRK]
rates of layers
Definition CodingParams.h:143
uint16_t layer_
if != 0, then only the first "layer" layers are decompressed; if == 0 or not used,...
Definition CodingParams.h:236
char * comment[GRK_NUM_COMMENTS_SUPPORTED]
Definition CodingParams.h:266
uint32_t rateControlAlgorithm
Definition CodingParams.h:226
bool fromQCC
Definition CodingParams.h:71
grk_simple_mcc_decorrelation_data * mcc_records_
mcc records
Definition CodingParams.h:191
J2K_MCT_ARRAY_TYPE array_type_
Definition CodingParams.h:98
size_t ppt_len
size of ppt_data
Definition CodingParams.h:159
int32_t dc_level_shift_
the dc_level_shift
Definition CodingParams.h:89
uint32_t ppt_markers_count
number of ppt markers (reserved size)
Definition CodingParams.h:149
PPMMarker * ppm_marker
Definition CodingParams.h:274
uint8_t qmfbid
discrete wavelet transform identifier
Definition CodingParams.h:66
bool writeTLM
Definition CodingParams.h:224
bool writePLT
Definition CodingParams.h:222
uint8_t mct
multi-component transform identifier
Definition CodingParams.h:141
uint16_t state_
Decoder state: used to indicate in which part of the code stream the decompressor is (main header,...
Definition CodingParams.h:337
uint8_t cblkh
log2(code-blocks height)
Definition CodingParams.h:62
PLMarkerMgr * plm_markers
Definition CodingParams.h:283
grk_ppx * ppt_markers
ppt markers data (table indexed by Zppt)
Definition CodingParams.h:151
TileSet tilesToDecompress_
Definition CodingParams.h:323
uint32_t numpocs
number of progression order changes
Definition CodingParams.h:145
uint16_t comment_len[GRK_NUM_COMMENTS_SUPPORTED]
Definition CodingParams.h:267
uint8_t newTilePartProgressionDivider_
Flag determining tile part generation.
Definition CodingParams.h:214
bool enableTilePartGeneration_
Enabling Tile part generation.
Definition CodingParams.h:220
uint8_t * ppt_buffer
used to keep a track of the allocated memory
Definition CodingParams.h:155
uint8_t numTileParts_
number of tile parts for the tile.
Definition CodingParams.h:176
CodeStreamCompress * codeStream
Definition FileFormatCompress.h:60
#define GRK_NUM_COMMENTS_SUPPORTED
#define GRK_J2K_MAXRLVLS
#define GRK_J2K_MAXBANDS
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Progression order.
Copyright (C) 2016-2023 Grok Image Compression Inc.
Definition ICacheable.h:20
DECOMPRESS_STATE
Status of decoding process when decoding main header or tile header.
Definition CodingParams.h:292
@ DECOMPRESS_STATE_TPH
the decoding process is in a tile part header
Definition CodingParams.h:297
@ DECOMPRESS_STATE_MH_SIZ
a SIZ marker is expected
Definition CodingParams.h:295
@ DECOMPRESS_STATE_DATA
the decoding process is expecting to read tile data from the code stream
Definition CodingParams.h:300
@ DECOMPRESS_STATE_NONE
no decompress state
Definition CodingParams.h:293
@ DECOMPRESS_STATE_EOC
the decoding process has encountered the EOC marker
Definition CodingParams.h:302
@ DECOMPRESS_STATE_NO_EOC
the decoding process must not expect a EOC marker because the code stream is truncated
Definition CodingParams.h:303
@ DECOMPRESS_STATE_MH_SOC
a SOC marker is expected
Definition CodingParams.h:294
@ DECOMPRESS_STATE_TPH_SOT
the decoding process is in a tile part header and expects a SOT marker
Definition CodingParams.h:298
@ DECOMPRESS_STATE_MH
the decoding process is in the main header
Definition CodingParams.h:296
grk_rect< uint32_t > grk_rect32
Definition geometry.h:61
J2K_MCT_ARRAY_TYPE
Type of MCT array.
Definition CodingParams.h:43
@ MCT_TYPE_OFFSET
Definition CodingParams.h:46
@ MCT_TYPE_DECORRELATION
Definition CodingParams.h:45
@ MCT_TYPE_DEPENDENCY
Definition CodingParams.h:44
J2K_MCT_ELEMENT_TYPE
Type of elements storing in the MCT data.
Definition CodingParams.h:32
@ MCT_TYPE_FLOAT
MCT data is stored as signed integers.
Definition CodingParams.h:35
@ MCT_TYPE_INT16
Definition CodingParams.h:33
@ MCT_TYPE_INT32
MCT data is stored as signed shorts.
Definition CodingParams.h:34
@ MCT_TYPE_DOUBLE
MCT data is stored as floats.
Definition CodingParams.h:36
grk_image * image
Definition plugin_interface.h:63
Progression order change.
Definition grok.h:135
Definition PLMarkerMgr.h:30
Definition LengthCache.h:107