Grok  9.7.5
CodingParams.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 
22 #pragma once
23 
24 #include "Quantizer.h"
25 
26 namespace grk
27 {
32 {
36  MCT_TYPE_DOUBLE = 3
37 };
38 
43 {
46  MCT_TYPE_OFFSET = 2
47 };
48 
53 {
56  uint8_t csty;
58  uint8_t numresolutions;
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;
89  int32_t dc_level_shift_;
90 };
91 
96 {
99  uint32_t index_;
100  uint8_t* data_;
101  uint32_t data_size_;
102 };
103 
108 {
109  uint32_t index_;
110  uint32_t nb_comps_;
113  uint32_t is_irreversible_ : 1;
114 };
115 
122 {
125 
126  bool copy(const TileCodingParams* rhs, const GrkImage* image);
127  void setIsHT(bool ht, bool reversible, uint8_t guardBits);
128  bool isHT(void);
129  uint32_t getNumProgressions(void);
130  bool hasPoc(void);
131 
133  uint8_t csty;
137  uint16_t numlayers;
140  uint8_t mct;
144  uint32_t numpocs;
152  uint8_t* ppt_data;
154  uint8_t* ppt_buffer;
158  size_t ppt_len;
161  // quantization style as read from main QCD marker
162  uint32_t main_qcd_qntsty;
163  // number of step sizes as read from main QCD marker
167  // current tile part index, based on count of tile parts
168  // (-1 if never incremented)
169  // NOTES:
170  // 1. tile parts must appear in code stream in strictly increasing
171  // order
172  // 2. tile part index must be <= 255
175  uint8_t numTileParts_;
178  double* mct_norms;
186  uint32_t nb_mct_records_;
192  uint32_t nb_mcc_records_;
196  bool cod;
198  bool ppt;
200 
201  private:
202  bool ht_;
203 };
204 
206 {
220  /* write plt marker */
221  bool writePLT;
222  /* write TLM marker */
223  bool writeTLM;
224  /* rate control algorithm */
226 };
227 
229 {
232  uint8_t reduce_;
235  uint16_t layer_;
236 
238 };
239 
244 {
245  CodingParams();
246  ~CodingParams();
247  grk_rect32 getTileBounds(const GrkImage* p_image, uint32_t tile_x, uint32_t tile_y) const;
248 
250  uint16_t rsiz;
251  /* Pcap */
252  uint32_t pcap;
253  /* Ccap */
254  uint16_t ccap[32];
256  uint32_t tx0;
258  uint32_t ty0;
260  uint32_t t_width;
262  uint32_t t_height;
264  size_t num_comments;
268  // note: maximum number of tiles is 65535
270  uint16_t t_grid_width;
272  uint16_t t_grid_height;
276  union
277  {
283 };
284 
290 {
296  DECOMPRESS_STATE_TPH_SOT = 0x0010,
298  DECOMPRESS_STATE_DATA = 0x0020,
301  DECOMPRESS_STATE_NO_EOC = 0x0080,
303 };
304 
305 class CodeStreamDecompress;
306 
308 {
310  bool findNextTile(CodeStreamDecompress* codeStream);
311  uint16_t getState(void);
312  void setState(uint16_t state);
313  void orState(uint16_t state);
314  void andState(uint16_t state);
315 
316  // store decoding parameters common to all tiles (information
317  // like COD, COC and RGN in main header)
332  // Indicates that the last tile part header has been read, so that
333  // the tile's data can now be decompressed
336 
337  private:
340  uint16_t state_;
341 };
342 
344 {
348  uint16_t total_tile_parts_; /* numTilePartsTotal */
349 };
350 
351 } // namespace grk
Definition: CodeStreamDecompress.h:38
Definition: GrkImage.h:22
Definition: PPMMarker.h:35
#define GRK_NUM_COMMENTS_SUPPORTED
Definition: grok.h:385
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Progression order.
#define GRK_J2K_MAXRLVLS
Definition: grok.h:91
#define GRK_J2K_MAXBANDS
Definition: grok.h:93
Copyright (C) 2016-2022 Grok Image Compression Inc.
Definition: ICacheable.h:20
const uint16_t maxCompressLayersGRK
Definition: CodeStreamLimits.h:43
DECOMPRESS_STATE
Status of decoding process when decoding main header or tile header.
Definition: CodingParams.h:290
@ DECOMPRESS_STATE_TPH
the decoding process is in a tile part header
Definition: CodingParams.h:295
@ DECOMPRESS_STATE_MH_SIZ
a SIZ marker is expected
Definition: CodingParams.h:293
@ DECOMPRESS_STATE_DATA
the decoding process is expecting to read tile data from the code stream
Definition: CodingParams.h:298
@ DECOMPRESS_STATE_NONE
no decompress state
Definition: CodingParams.h:291
@ DECOMPRESS_STATE_EOC
the decoding process has encountered the EOC marker
Definition: CodingParams.h:300
@ DECOMPRESS_STATE_NO_EOC
the decoding process must not expect a EOC marker because the code stream is truncated
Definition: CodingParams.h:301
@ DECOMPRESS_STATE_MH_SOC
a SOC marker is expected
Definition: CodingParams.h:292
@ DECOMPRESS_STATE_TPH_SOT
the decoding process is in a tile part header and expects a SOT marker
Definition: CodingParams.h:296
@ DECOMPRESS_STATE_MH
the decoding process is in the main header
Definition: CodingParams.h:294
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
Progression order change.
Definition: grok.h:422
Coding parameters.
Definition: CodingParams.h:244
size_t num_comments
comments
Definition: CodingParams.h:264
CodingParams()
Definition: CodingParams.cpp:26
TileCodingParams * tcps
tile coding parameters
Definition: CodingParams.h:275
uint16_t ccap[32]
Definition: CodingParams.h:254
union grk::CodingParams::@0 coding_params_
uint32_t t_width
XTsiz.
Definition: CodingParams.h:260
uint16_t t_grid_height
number of tiles in height
Definition: CodingParams.h:272
uint32_t pcap
Definition: CodingParams.h:252
DecodingParams dec_
Definition: CodingParams.h:278
uint32_t tx0
XTOsiz.
Definition: CodingParams.h:256
bool isBinaryComment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: CodingParams.h:267
EncodingParams enc_
Definition: CodingParams.h:279
uint32_t t_height
YTsiz.
Definition: CodingParams.h:262
uint32_t ty0
YTOsiz.
Definition: CodingParams.h:258
uint16_t rsiz
Rsiz.
Definition: CodingParams.h:250
TileLengthMarkers * tlm_markers
Definition: CodingParams.h:281
uint16_t t_grid_width
number of tiles in width
Definition: CodingParams.h:270
char * comment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: CodingParams.h:265
PPMMarker * ppm_marker
Definition: CodingParams.h:273
grk_rect32 getTileBounds(const GrkImage *p_image, uint32_t tile_x, uint32_t tile_y) const
Definition: CodingParams.cpp:45
PLMarkerMgr * plm_markers
Definition: CodingParams.h:282
~CodingParams()
Definition: CodingParams.cpp:33
uint16_t comment_len[GRK_NUM_COMMENTS_SUPPORTED]
Definition: CodingParams.h:266
Definition: CodingParams.h:344
CompressorState()
Definition: CodingParams.h:345
uint16_t total_tile_parts_
Total num of tile parts in whole image = num tiles* num tileparts in each tile.
Definition: CodingParams.h:348
Definition: CodingParams.h:229
uint16_t layer_
if != 0, then only the first "layer" layers are decompressed; if == 0 or not used,...
Definition: CodingParams.h:235
uint32_t randomAccessFlags_
Definition: CodingParams.h:237
uint8_t reduce_
if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decompressed to...
Definition: CodingParams.h:232
Definition: CodingParams.h:308
bool lastTilePartWasRead
Definition: CodingParams.h:334
bool lastTilePartInCodeStream
Indicate that the current tile-part is assumed to be the last tile part of the code stream.
Definition: CodingParams.h:331
uint64_t lastSotReadPosition
Position of the last SOT marker read.
Definition: CodingParams.h:325
uint32_t start_tile_x_index_
Only tile indices in the correct range will be decompressed.
Definition: CodingParams.h:320
bool findNextTile(CodeStreamDecompress *codeStream)
Definition: CodingParams.cpp:250
bool skipTileData
Definition: CodingParams.h:335
TileCodingParams * default_tcp_
Definition: CodingParams.h:318
void andState(uint16_t state)
Definition: CodingParams.cpp:246
void orState(uint16_t state)
Definition: CodingParams.cpp:242
DecompressorState()
Definition: CodingParams.cpp:228
uint16_t state_
Decoder state: used to indicate in which part of the code stream the decompressor is (main header,...
Definition: CodingParams.h:340
uint32_t end_tile_y_index_
Definition: CodingParams.h:323
uint32_t start_tile_y_index_
Definition: CodingParams.h:321
uint16_t getState(void)
Definition: CodingParams.cpp:234
void setState(uint16_t state)
Definition: CodingParams.cpp:238
uint32_t end_tile_x_index_
Definition: CodingParams.h:322
Definition: CodingParams.h:206
uint32_t newTilePartProgressionPosition
Position of tile part flag in progression order.
Definition: CodingParams.h:211
bool writePLT
Definition: CodingParams.h:221
bool allocationByRateDistortion_
allocation by rate/distortion
Definition: CodingParams.h:215
bool writeTLM
Definition: CodingParams.h:223
bool enableTilePartGeneration_
Enabling Tile part generation.
Definition: CodingParams.h:219
uint8_t newTilePartProgressionDivider_
Flag determining tile part generation.
Definition: CodingParams.h:213
size_t max_comp_size_
Maximum rate for each component.
Definition: CodingParams.h:209
bool allocationByFixedQuality_
allocation by fixed_quality
Definition: CodingParams.h:217
uint32_t rateControlAlgorithm
Definition: CodingParams.h:225
Definition: PLMarkerMgr.h:30
Definition: Quantizer.h:39
Definition: SparseBuffer.h:28
Tile coding parameters : this structure is used to store coding/decoding parameters common to all til...
Definition: CodingParams.h:122
grk_mct_data * mct_records_
mct records
Definition: CodingParams.h:184
bool hasPoc(void)
Definition: CodingParams.cpp:212
GRK_PROG_ORDER prg
progression order
Definition: CodingParams.h:135
uint8_t tilePartCounter_
Definition: CodingParams.h:173
uint8_t numTileParts_
number of tile parts for the tile.
Definition: CodingParams.h:175
uint32_t main_qcd_qntsty
Definition: CodingParams.h:162
uint32_t main_qcd_numStepSizes
Definition: CodingParams.h:164
uint8_t * ppt_buffer
used to keep a track of the allocated memory
Definition: CodingParams.h:154
uint8_t csty
coding style
Definition: CodingParams.h:133
double rates[maxCompressLayersGRK]
rates of layers
Definition: CodingParams.h:142
uint8_t mct
multi-component transform identifier
Definition: CodingParams.h:140
bool cod
If cod == true --> there was a COD marker for the present tile.
Definition: CodingParams.h:196
bool ppt
If ppt == true --> there was a PPT marker for the present tile.
Definition: CodingParams.h:198
uint32_t nb_mct_records_
the number of mct records.
Definition: CodingParams.h:186
TileComponentCodingParams * tccps
tile-component coding parameters
Definition: CodingParams.h:166
uint8_t * ppt_data
packet header store there for future use in t2_decode_packet
Definition: CodingParams.h:152
uint16_t numLayersToDecompress
Definition: CodingParams.h:138
size_t ppt_data_size
Number of bytes stored inside ppt_data.
Definition: CodingParams.h:156
bool isHT(void)
Definition: CodingParams.cpp:204
float * mct_coding_matrix_
the mct coding matrix
Definition: CodingParams.h:182
double * mct_norms
compressing norms
Definition: CodingParams.h:178
uint16_t numlayers
number of layers
Definition: CodingParams.h:137
void setIsHT(bool ht, bool reversible, uint8_t guardBits)
Definition: CodingParams.cpp:197
uint32_t ppt_markers_count
number of ppt markers (reserved size)
Definition: CodingParams.h:148
uint32_t nb_max_mcc_records_
the max number of mct records.
Definition: CodingParams.h:194
bool copy(const TileCodingParams *rhs, const GrkImage *image)
Definition: CodingParams.cpp:111
uint32_t getNumProgressions(void)
Definition: CodingParams.cpp:208
TileCodingParams()
Definition: CodingParams.cpp:65
uint32_t nb_max_mct_records_
the max number of mct records.
Definition: CodingParams.h:188
size_t ppt_len
size of ppt_data
Definition: CodingParams.h:158
uint32_t nb_mcc_records_
the number of mct records.
Definition: CodingParams.h:192
grk_ppx * ppt_markers
ppt markers data (table indexed by Zppt)
Definition: CodingParams.h:150
float * mct_decoding_matrix_
the mct decoding matrix
Definition: CodingParams.h:180
~TileCodingParams()
Definition: CodingParams.cpp:81
double distortion[maxCompressLayersGRK]
fixed_quality
Definition: CodingParams.h:160
SparseBuffer * compressedTileData_
Definition: CodingParams.h:176
grk_simple_mcc_decorrelation_data * mcc_records_
mcc records
Definition: CodingParams.h:190
uint32_t numpocs
number of progression order changes
Definition: CodingParams.h:144
grk_progression progressionOrderChange[GRK_J2K_MAXRLVLS]
progression order changes
Definition: CodingParams.h:146
Quantizer * qcd_
Definition: CodingParams.h:199
bool ht_
Definition: CodingParams.h:202
Tile-component coding parameters.
Definition: CodingParams.h:53
grk_stepsize stepsizes[GRK_J2K_MAXBANDS]
stepsizes used for quantization
Definition: CodingParams.h:77
uint8_t csty
coding style
Definition: CodingParams.h:56
int32_t dc_level_shift_
the dc_level_shift
Definition: CodingParams.h:89
uint8_t cblkh
log2(code-blocks height)
Definition: CodingParams.h:62
uint8_t numgbits
number of guard bits
Definition: CodingParams.h:81
uint8_t cblk_sty
code-block mode
Definition: CodingParams.h:64
uint8_t qmfbid
discrete wavelet transform identifier
Definition: CodingParams.h:66
bool fromTileHeader
Definition: CodingParams.h:73
bool fromQCC
Definition: CodingParams.h:71
uint8_t numresolutions
number of resolutions
Definition: CodingParams.h:58
TileComponentCodingParams()
Definition: CodingParams.cpp:216
uint32_t precWidthExp[GRK_J2K_MAXRLVLS]
precinct width (power of 2 exponent, < 16)
Definition: CodingParams.h:85
uint8_t roishift
Region Of Interest shift.
Definition: CodingParams.h:83
uint8_t cblkw
log2(code-blocks width)
Definition: CodingParams.h:60
uint32_t precHeightExp[GRK_J2K_MAXRLVLS]
precinct height (power of 2 exponent, < 16)
Definition: CodingParams.h:87
uint8_t qntsty
quantisation style
Definition: CodingParams.h:75
uint8_t numStepSizes
Definition: CodingParams.h:79
bool quantizationMarkerSet
Definition: CodingParams.h:69
Definition: LengthCache.h:107
MCT data.
Definition: CodingParams.h:96
J2K_MCT_ARRAY_TYPE array_type_
Definition: CodingParams.h:98
uint32_t data_size_
Definition: CodingParams.h:101
J2K_MCT_ELEMENT_TYPE element_type_
Definition: CodingParams.h:97
uint32_t index_
Definition: CodingParams.h:99
uint8_t * data_
Definition: CodingParams.h:100
Definition: PPMMarker.h:29
MCC decorrelation data.
Definition: CodingParams.h:108
grk_mct_data * decorrelation_array_
Definition: CodingParams.h:111
uint32_t index_
Definition: CodingParams.h:109
uint32_t nb_comps_
Definition: CodingParams.h:110
uint32_t is_irreversible_
Definition: CodingParams.h:113
grk_mct_data * offset_array_
Definition: CodingParams.h:112
Quantization stepsize.
Definition: Quantizer.h:30