Grok  9.5.0
CodingParams.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 #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;
90 };
91 
96 {
99  uint32_t m_index;
100  uint8_t* m_data;
101  uint32_t m_data_size;
102 };
103 
108 {
109  uint32_t m_index;
110  uint32_t m_nb_comps;
113  uint32_t m_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 <= 254
175  uint8_t m_numTileParts;
178  double* mct_norms;
196  bool cod;
198  bool ppt;
200 
201  private:
202  bool m_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 m_reduce;
235  uint16_t m_layer;
236 };
237 
242 {
243  CodingParams();
244  ~CodingParams();
245  grkRectU32 getTileBounds(const GrkImage* p_image, uint32_t tile_x, uint32_t tile_y) const;
246 
248  uint16_t rsiz;
249  /* Pcap */
250  uint32_t pcap;
251  /* Ccap */
252  uint16_t ccap[32];
254  uint32_t tx0;
256  uint32_t ty0;
258  uint32_t t_width;
260  uint32_t t_height;
262  size_t num_comments;
266  // note: maximum number of tiles is 65535
268  uint32_t t_grid_width;
270  uint32_t t_grid_height;
274  union
275  {
281 };
282 
288 {
294  DECOMPRESS_STATE_TPH_SOT = 0x0010,
296  DECOMPRESS_STATE_DATA = 0x0020,
299  DECOMPRESS_STATE_NO_EOC = 0x0080,
301 };
302 
303 class CodeStreamDecompress;
304 
306 {
308  bool findNextTile(CodeStreamDecompress* codeStream);
309  uint16_t getState(void);
310  void setState(uint16_t state);
311  void orState(uint16_t state);
312  void andState(uint16_t state);
313 
314  // store decoding parameters common to all tiles (information
315  // like COD, COC and RGN in main header)
330  // Indicates that the last tile part header has been read, so that
331  // the tile's data can now be decompressed
334 
335  private:
338  uint16_t m_state;
339 };
340 
342 {
346  uint16_t m_total_tile_parts; /* numTilePartsTotal */
347 };
348 
349 } // namespace grk
Definition: CodeStreamDecompress.h:38
Definition: GrkImage.h:19
Definition: PPMMarker.h:35
#define GRK_NUM_COMMENTS_SUPPORTED
Definition: grok.h:384
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Progression order.
#define GRK_J2K_MAXRLVLS
Maximum number of resolution levels authorized.
Definition: grok.h:91
#define GRK_J2K_MAXBANDS
Maximum number of sub-bands.
Definition: grok.h:93
Copyright (C) 2016-2021 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:288
@ DECOMPRESS_STATE_TPH
the decoding process is in a tile part header
Definition: CodingParams.h:293
@ DECOMPRESS_STATE_MH_SIZ
a SIZ marker is expected
Definition: CodingParams.h:291
@ DECOMPRESS_STATE_DATA
the decoding process is expecting to read tile data from the code stream
Definition: CodingParams.h:296
@ DECOMPRESS_STATE_NONE
no decompress state
Definition: CodingParams.h:289
@ DECOMPRESS_STATE_EOC
the decoding process has encountered the EOC marker
Definition: CodingParams.h:298
@ DECOMPRESS_STATE_NO_EOC
the decoding process must not expect a EOC marker because the code stream is truncated
Definition: CodingParams.h:299
@ DECOMPRESS_STATE_MH_SOC
a SOC marker is expected
Definition: CodingParams.h:290
@ DECOMPRESS_STATE_TPH_SOT
the decoding process is in a tile part header and expects a SOT marker
Definition: CodingParams.h:294
@ DECOMPRESS_STATE_MH
the decoding process is in the main header
Definition: CodingParams.h:292
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:417
Coding parameters.
Definition: CodingParams.h:242
union grk::CodingParams::@0 m_coding_params
size_t num_comments
comments
Definition: CodingParams.h:262
uint32_t t_grid_width
number of tiles in width
Definition: CodingParams.h:268
CodingParams()
Definition: CodingParams.cpp:26
TileCodingParams * tcps
tile coding parameters
Definition: CodingParams.h:273
uint32_t t_grid_height
number of tiles in height
Definition: CodingParams.h:270
grkRectU32 getTileBounds(const GrkImage *p_image, uint32_t tile_x, uint32_t tile_y) const
Definition: CodingParams.cpp:45
uint16_t ccap[32]
Definition: CodingParams.h:252
uint32_t t_width
XTsiz.
Definition: CodingParams.h:258
PacketLengthMarkers * plm_markers
Definition: CodingParams.h:280
uint32_t pcap
Definition: CodingParams.h:250
uint32_t tx0
XTOsiz.
Definition: CodingParams.h:254
bool isBinaryComment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: CodingParams.h:265
uint32_t t_height
YTsiz.
Definition: CodingParams.h:260
uint32_t ty0
YTOsiz.
Definition: CodingParams.h:256
uint16_t rsiz
Rsiz.
Definition: CodingParams.h:248
TileLengthMarkers * tlm_markers
Definition: CodingParams.h:279
EncodingParams m_enc
Definition: CodingParams.h:277
char * comment[GRK_NUM_COMMENTS_SUPPORTED]
Definition: CodingParams.h:263
PPMMarker * ppm_marker
Definition: CodingParams.h:271
~CodingParams()
Definition: CodingParams.cpp:33
uint16_t comment_len[GRK_NUM_COMMENTS_SUPPORTED]
Definition: CodingParams.h:264
DecodingParams m_dec
Definition: CodingParams.h:276
Definition: CodingParams.h:342
CompressorState()
Definition: CodingParams.h:343
uint16_t m_total_tile_parts
Total num of tile parts in whole image = num tiles* num tileparts in each tile.
Definition: CodingParams.h:346
Definition: CodingParams.h:229
uint8_t m_reduce
if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decompressed to...
Definition: CodingParams.h:232
uint16_t m_layer
if != 0, then only the first "layer" layers are decompressed; if == 0 or not used,...
Definition: CodingParams.h:235
Definition: CodingParams.h:306
uint32_t m_end_tile_x_index
Definition: CodingParams.h:320
bool lastTilePartWasRead
Definition: CodingParams.h:332
bool lastTilePartInCodeStream
Indicate that the current tile-part is assumed to be the last tile part of the code stream.
Definition: CodingParams.h:329
TileCodingParams * m_default_tcp
Definition: CodingParams.h:316
uint64_t lastSotReadPosition
Position of the last SOT marker read.
Definition: CodingParams.h:323
bool findNextTile(CodeStreamDecompress *codeStream)
Definition: CodingParams.cpp:252
uint16_t m_state
Decoder state: used to indicate in which part of the code stream the decompressor is (main header,...
Definition: CodingParams.h:338
bool skipTileData
Definition: CodingParams.h:333
uint32_t m_end_tile_y_index
Definition: CodingParams.h:321
uint32_t m_start_tile_y_index
Definition: CodingParams.h:319
uint32_t m_start_tile_x_index
Only tile indices in the correct range will be decompressed.
Definition: CodingParams.h:318
void andState(uint16_t state)
Definition: CodingParams.cpp:248
void orState(uint16_t state)
Definition: CodingParams.cpp:244
DecompressorState()
Definition: CodingParams.cpp:229
uint16_t getState(void)
Definition: CodingParams.cpp:236
void setState(uint16_t state)
Definition: CodingParams.cpp:240
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
size_t m_max_comp_size
Maximum rate for each component.
Definition: CodingParams.h:209
bool m_enableTilePartGeneration
Enabling Tile part generation.
Definition: CodingParams.h:219
bool m_allocationByFixedQuality
allocation by fixed_quality
Definition: CodingParams.h:217
bool m_allocationByRateDistortion
allocation by rate/distortion
Definition: CodingParams.h:215
uint8_t m_newTilePartProgressionDivider
Flag determining tile part generation.
Definition: CodingParams.h:213
bool writeTLM
Definition: CodingParams.h:223
uint32_t rateControlAlgorithm
Definition: CodingParams.h:225
Definition: PacketLengthMarkers.h:39
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
bool hasPoc(void)
Definition: CodingParams.cpp:213
GRK_PROG_ORDER prg
progression order
Definition: CodingParams.h:135
SparseBuffer * m_compressedTileData
Definition: CodingParams.h:176
float * m_mct_decoding_matrix
the mct decoding matrix
Definition: CodingParams.h:180
uint32_t main_qcd_qntsty
Definition: CodingParams.h:162
int16_t m_tilePartIndexCounter
Definition: CodingParams.h:173
grk_mct_data * m_mct_records
mct records
Definition: CodingParams.h:184
uint32_t m_nb_mcc_records
the number of mct records.
Definition: CodingParams.h:192
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
float * m_mct_coding_matrix
the mct coding matrix
Definition: CodingParams.h:182
bool cod
If cod == true --> there was a COD marker for the present tile.
Definition: CodingParams.h:196
uint32_t m_nb_mct_records
the number of mct records.
Definition: CodingParams.h:186
bool ppt
If ppt == true --> there was a PPT marker for the present tile.
Definition: CodingParams.h:198
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:205
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:198
uint32_t ppt_markers_count
number of ppt markers (reserved size)
Definition: CodingParams.h:148
Quantizer * m_qcd
Definition: CodingParams.h:199
bool copy(const TileCodingParams *rhs, const GrkImage *image)
Definition: CodingParams.cpp:112
uint32_t m_nb_max_mct_records
the max number of mct records.
Definition: CodingParams.h:188
uint32_t getNumProgressions(void)
Definition: CodingParams.cpp:209
TileCodingParams()
Definition: CodingParams.cpp:65
uint32_t m_nb_max_mcc_records
the max number of mct records.
Definition: CodingParams.h:194
size_t ppt_len
size of ppt_data
Definition: CodingParams.h:158
grk_ppx * ppt_markers
ppt markers data (table indexed by Zppt)
Definition: CodingParams.h:150
uint8_t m_numTileParts
number of tile parts for the tile.
Definition: CodingParams.h:175
~TileCodingParams()
Definition: CodingParams.cpp:82
double distortion[maxCompressLayersGRK]
fixed_quality
Definition: CodingParams.h:160
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
grk_simple_mcc_decorrelation_data * m_mcc_records
mcc records
Definition: CodingParams.h:190
bool m_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
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
int32_t m_dc_level_shift
the dc_level_shift
Definition: CodingParams.h:89
bool fromTileHeader
Definition: CodingParams.h:73
bool fromQCC
Definition: CodingParams.h:71
uint32_t precinctHeightExp[GRK_J2K_MAXRLVLS]
precinct height (power of 2 exponent, < 16)
Definition: CodingParams.h:87
uint8_t numresolutions
number of resolutions
Definition: CodingParams.h:58
TileComponentCodingParams()
Definition: CodingParams.cpp:217
uint8_t roishift
Region Of Interest shift.
Definition: CodingParams.h:83
uint8_t cblkw
log2(code-blocks width)
Definition: CodingParams.h:60
uint32_t precinctWidthExp[GRK_J2K_MAXRLVLS]
precinct width (power of 2 exponent, < 16)
Definition: CodingParams.h:85
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:117
MCT data.
Definition: CodingParams.h:96
J2K_MCT_ARRAY_TYPE m_array_type
Definition: CodingParams.h:98
uint32_t m_index
Definition: CodingParams.h:99
J2K_MCT_ELEMENT_TYPE m_element_type
Definition: CodingParams.h:97
uint32_t m_data_size
Definition: CodingParams.h:101
uint8_t * m_data
Definition: CodingParams.h:100
Definition: PPMMarker.h:29
MCC decorrelation data.
Definition: CodingParams.h:108
grk_mct_data * m_offset_array
Definition: CodingParams.h:112
uint32_t m_index
Definition: CodingParams.h:109
uint32_t m_is_irreversible
Definition: CodingParams.h:113
grk_mct_data * m_decorrelation_array
Definition: CodingParams.h:111
uint32_t m_nb_comps
Definition: CodingParams.h:110
Quantization stepsize.
Definition: Quantizer.h:30