Grok  7.6.6
T1Structs.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 
18 #pragma once
19 
20 #include "grk_includes.h"
21 #include <map>
22 
23 namespace grk {
24 
25 class ISparseBuffer;
26 struct grk_tile;
27 struct TileComponent;
28 
33 };
34 
35 
42 };
43 
44 
46 // Band Indices
47 
48 // LL band index when resolution == 0
49 const uint32_t BAND_RES_ZERO_INDEX_LL = 0;
50 
51 // band indices when resolution > 0
57 };
59 
60 
61 // code segment (code block can be encoded into multiple segments)
62 struct Segment {
63  Segment();
64 
65  void clear();
66  uint32_t dataindex; // segment data offset in contiguous memory block
67  uint32_t numpasses; // number of passes in segment
68  uint32_t len; // total length of segment
69  uint32_t maxpasses; // maximum number of passes in segment
70  uint32_t numPassesInPacket; // number of passes contributed by current packet
71  uint32_t numBytesInPacket; // number of bytes contributed by current packet
72 };
73 
75  PacketLengthInfo(uint32_t mylength, uint32_t bits);
77  bool operator==(const PacketLengthInfo &rhs) const;
78  uint32_t len;
79  uint32_t len_bits;
80 };
81 
82 // compressing/decoding pass
83 struct CodePass {
84  CodePass();
85  uint32_t rate;
86  double distortiondec;
87  uint32_t len;
88  uint8_t term;
89  uint16_t slope; //ln(slope) in 8.8 fixed point
90 };
91 
92 //quality layer
93 struct Layer {
94  Layer();
95  uint32_t numpasses; /* Number of passes in the layer */
96  uint32_t len; /* len of information */
97  double disto; /* add for index (Cfr. Marcela) */
98  uint8_t *data; /* data buffer (points to code block data) */
99 };
100 
101 struct Codeblock : public grk_rect_u32 {
102  Codeblock(const Codeblock &rhs);
103  Codeblock();
104  Codeblock& operator=(const Codeblock& other);
105  virtual ~Codeblock(){}
106  virtual void clear();
108  uint32_t numbps;
109  uint32_t numlenbits;
110  uint32_t numPassesInPacket; /* number of passes encoded in current packet */
111 #ifdef DEBUG_LOSSLESS_T2
112  uint32_t included;
113  std::vector<PacketLengthInfo> packet_length_info;
114 #endif
115 };
116 
117 // compressor code block
118 struct CompressCodeblock : public Codeblock {
123 
124  void clear() override;
125  bool alloc();
126  bool alloc_data(size_t nominalBlockSize);
127  void cleanup();
131  uint32_t numPassesInPreviousPackets; /* number of passes in previous packets */
132  uint32_t numPassesTotal; /* total number of passes in all layers */
133  uint32_t *contextStream;
134 };
135 
136 //decompressor code block
142 
143  void clear() override;
144  void init();
145  bool alloc();
146  void cleanup();
147  void cleanup_seg_buffers();
148  size_t getSegBuffersLen();
149  bool copy_to_contiguous_buffer(uint8_t *buffer);
150  std::vector<grk_buf*> seg_buffers;
151  Segment *segs; /* information on segments */
152  uint32_t numSegments; /* number of segment in block*/
153  uint32_t numSegmentsAllocated; // number of segments allocated for segs array
154 
155 };
156 
157 struct PrecinctImpl {
158  PrecinctImpl();
159  ~PrecinctImpl();
160  void initTagTrees();
161  void deleteTagTrees();
162  bool init(bool isCompressor,
163  grk_rect_u32 *bounds,
164  grk_pt cblk_expn,
165  grk_plugin_tile *current_plugin_tile);
166 
167  uint32_t cblk_grid_width;
171  TagTree *incltree; /* inclusion tree */
172  TagTree *imsbtree; /* IMSB tree */
173 };
174 
175 
176 // precinct
177 struct Precinct : public grk_rect_u32 {
178  Precinct(void);
179  ~Precinct(void);
180  bool init(bool isCompressor,
181  grk_pt cblk_expn,
182  grk_plugin_tile *current_plugin_tile);
183 
184  void initTagTrees(void);
185  void deleteTagTrees(void);
186  uint32_t getCblkGridwidth(void);
187  uint32_t getCblkGridHeight(void);
188  uint64_t getNumCblks(void);
191  TagTree* getInclTree(void);
192  TagTree* getImsbTree(void);
193 
194  uint64_t precinctIndex;
195 private:
198 };
199 
200 
201 
202 // band
203 struct Subband : public grk_rect_u32 {
204  Subband();
205  Subband(const Subband &rhs);
206  Subband& operator= (const Subband &rhs);
207  bool isEmpty() ;
208  void print();
209  Precinct* getPrecinct(uint64_t precinctIndex);
210  Precinct* createPrecinct(bool isCompressor,
211  uint64_t precinctIndex,
212  grk_pt precinct_start,
213  grk_pt precinct_expn,
214  uint32_t pw,
215  grk_pt cblk_expn,
216  grk_plugin_tile *current_plugin_tile);
217 
219  std::vector<Precinct*> precincts;
220  // maps global precinct index to vector index
221  std::map<uint64_t, uint64_t> precinctMap;
222  uint64_t numPrecincts;
223  uint32_t numbps;
224  float stepsize;
225 };
226 
227 // resolution
228 struct Resolution : public grk_rect_u32 {
229  Resolution();
230  void print();
231  bool init(bool isCompressor,
233  uint8_t resno,
235 
237  Subband band[BAND_NUM_INDICES]; // unreduced tile component bands
238  // (in canvas coords, but shifted to tile origin)
239  uint32_t numBandWindows; // 1 or 3
240  uint32_t pw, ph; /* dimensions of precinct grid */
245 
246 };
247 
248 struct BlockExec : public IOpenable {
249 
250  BlockExec();
252  uint8_t bandIndex;
254  float stepsize;
255  uint32_t cblk_sty;
256  uint8_t qmfbid;
257  /* code block offset in tile coordinates*/
258  uint32_t x;
259  uint32_t y;
260  // missing bit planes for all blocks in band
261  uint8_t k_msbs;
262  bool isOpen;
263 };
264 
265 
266 struct TileComponent;
267 
270  bool open(T1Interface *t1);
271  void close(void);
272 
274  uint8_t resno;
275  uint32_t roishift;
276 
277 };
278 
279 struct CompressBlockExec : public BlockExec{
281  bool open(T1Interface *t1);
282  void close(void);
283 
287  double distortion;
288  int32_t *tiledp;
289  uint16_t compno;
290  uint8_t resno;
291  uint64_t precinctIndex;
292  uint64_t cblkno;
293  float inv_step_ht;
294  const double *mct_norms;
295 #ifdef DEBUG_LOSSLESS_T1
296  int32_t* unencodedData;
297 #endif
298  uint16_t mct_numcomps;
299 
300 };
301 
302 
303 }
Definition: IOpenable.h:7
Definition: T1Interface.h:23
Tag tree.
Definition: TagTree.h:46
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: BitIO.cpp:23
eSplitOrientation
Definition: T1Structs.h:29
@ SPLIT_H
Definition: T1Structs.h:31
@ SPLIT_L
Definition: T1Structs.h:30
@ SPLIT_NUM_ORIENTATIONS
Definition: T1Structs.h:32
eBandOrientation
Definition: T1Structs.h:36
@ BAND_ORIENT_HH
Definition: T1Structs.h:40
@ BAND_ORIENT_HL
Definition: T1Structs.h:38
@ BAND_NUM_ORIENTATIONS
Definition: T1Structs.h:41
@ BAND_ORIENT_LH
Definition: T1Structs.h:39
@ BAND_ORIENT_LL
Definition: T1Structs.h:37
eBandIndex
Definition: T1Structs.h:52
@ BAND_INDEX_HL
Definition: T1Structs.h:53
@ BAND_INDEX_LH
Definition: T1Structs.h:54
@ BAND_NUM_INDICES
Definition: T1Structs.h:56
@ BAND_INDEX_HH
Definition: T1Structs.h:55
const uint32_t BAND_RES_ZERO_INDEX_LL
Definition: T1Structs.h:49
Plugin tile.
Definition: grok.h:1254
Definition: T1Structs.h:248
eBandOrientation band_orientation
Definition: T1Structs.h:253
uint32_t cblk_sty
Definition: T1Structs.h:255
uint32_t y
Definition: T1Structs.h:259
uint32_t x
Definition: T1Structs.h:258
uint8_t k_msbs
Definition: T1Structs.h:261
uint8_t qmfbid
Definition: T1Structs.h:256
TileComponent * tilec
Definition: T1Structs.h:251
float stepsize
Definition: T1Structs.h:254
bool isOpen
Definition: T1Structs.h:262
BlockExec()
Definition: T1Structs.cpp:610
uint8_t bandIndex
Definition: T1Structs.h:252
Definition: T1Structs.h:83
uint16_t slope
Definition: T1Structs.h:89
uint8_t term
Definition: T1Structs.h:88
uint32_t len
Definition: T1Structs.h:87
uint32_t rate
Definition: T1Structs.h:85
double distortiondec
Definition: T1Structs.h:86
CodePass()
Definition: T1Structs.cpp:45
Definition: T1Structs.h:101
Codeblock()
Definition: T1Structs.cpp:224
grk_buf compressedStream
Definition: T1Structs.h:107
uint32_t numPassesInPacket
Definition: T1Structs.h:110
virtual void clear()
Definition: T1Structs.cpp:261
virtual ~Codeblock()
Definition: T1Structs.h:105
uint32_t numbps
Definition: T1Structs.h:108
Codeblock & operator=(const Codeblock &other)
Definition: T1Structs.cpp:244
uint32_t numlenbits
Definition: T1Structs.h:109
Definition: T1Structs.h:279
grk_tile * tile
Definition: T1Structs.h:285
bool open(T1Interface *t1)
Definition: T1Structs.cpp:640
int32_t * tiledp
Definition: T1Structs.h:288
bool doRateControl
Definition: T1Structs.h:286
void close(void)
Definition: T1Structs.cpp:645
float inv_step_ht
Definition: T1Structs.h:293
uint16_t compno
Definition: T1Structs.h:289
double distortion
Definition: T1Structs.h:287
uint64_t cblkno
Definition: T1Structs.h:292
uint8_t resno
Definition: T1Structs.h:290
uint16_t mct_numcomps
Definition: T1Structs.h:298
uint64_t precinctIndex
Definition: T1Structs.h:291
CompressBlockExec()
Definition: T1Structs.cpp:622
const double * mct_norms
Definition: T1Structs.h:294
CompressCodeblock * cblk
Definition: T1Structs.h:284
Definition: T1Structs.h:118
CompressCodeblock & operator=(const CompressCodeblock &other)
Definition: T1Structs.cpp:284
~CompressCodeblock()
Definition: T1Structs.cpp:301
void clear() override
Definition: T1Structs.cpp:304
CompressCodeblock()
Definition: T1Structs.cpp:265
uint32_t numPassesInPreviousPackets
Definition: T1Structs.h:131
uint32_t numPassesTotal
Definition: T1Structs.h:132
CodePass * passes
Definition: T1Structs.h:130
bool alloc()
Definition: T1Structs.cpp:313
bool alloc_data(size_t nominalBlockSize)
Allocates data memory for an compressing code block.
Definition: T1Structs.cpp:335
uint32_t * contextStream
Definition: T1Structs.h:133
void cleanup()
Definition: T1Structs.cpp:352
Layer * layers
Definition: T1Structs.h:129
uint8_t * paddedCompressedStream
Definition: T1Structs.h:128
Definition: T1Structs.h:268
uint8_t resno
Definition: T1Structs.h:274
bool open(T1Interface *t1)
Definition: T1Structs.cpp:655
void close(void)
Definition: T1Structs.cpp:660
DecompressBlockExec()
Definition: T1Structs.cpp:649
uint32_t roishift
Definition: T1Structs.h:275
DecompressCodeblock * cblk
Definition: T1Structs.h:273
Definition: T1Structs.h:137
size_t getSegBuffersLen()
Definition: T1Structs.cpp:444
bool copy_to_contiguous_buffer(uint8_t *buffer)
Definition: T1Structs.cpp:450
void init()
Definition: T1Structs.cpp:412
bool alloc()
Definition: T1Structs.cpp:387
void cleanup_seg_buffers()
Definition: T1Structs.cpp:436
void clear() override
Definition: T1Structs.cpp:368
uint32_t numSegmentsAllocated
Definition: T1Structs.h:153
DecompressCodeblock & operator=(const DecompressCodeblock &other)
Definition: T1Structs.cpp:380
std::vector< grk_buf * > seg_buffers
Definition: T1Structs.h:150
~DecompressCodeblock()
Definition: T1Structs.cpp:365
Segment * segs
Definition: T1Structs.h:151
uint32_t numSegments
Definition: T1Structs.h:152
void cleanup()
Definition: T1Structs.cpp:429
DecompressCodeblock()
Definition: T1Structs.cpp:361
Definition: T1Structs.h:93
uint32_t len
Definition: T1Structs.h:96
double disto
Definition: T1Structs.h:97
uint8_t * data
Definition: T1Structs.h:98
Layer()
Definition: T1Structs.cpp:48
uint32_t numpasses
Definition: T1Structs.h:95
Definition: T1Structs.h:74
PacketLengthInfo()
Definition: T1Structs.cpp:38
uint32_t len_bits
Definition: T1Structs.h:79
bool operator==(const PacketLengthInfo &rhs) const
Definition: T1Structs.cpp:41
uint32_t len
Definition: T1Structs.h:78
Definition: T1Structs.h:177
uint32_t getCblkGridHeight(void)
Definition: T1Structs.cpp:87
TagTree * getImsbTree(void)
Definition: T1Structs.cpp:102
uint64_t getNumCblks(void)
Definition: T1Structs.cpp:90
CompressCodeblock * getCompressedBlockPtr(void)
Definition: T1Structs.cpp:93
DecompressCodeblock * getDecompressedBlockPtr(void)
Definition: T1Structs.cpp:96
PrecinctImpl * impl
Definition: T1Structs.h:196
bool init(bool isCompressor, grk_pt cblk_expn, grk_plugin_tile *current_plugin_tile)
Definition: T1Structs.cpp:62
TagTree * getInclTree(void)
Definition: T1Structs.cpp:99
void initTagTrees(void)
Definition: T1Structs.cpp:79
uint64_t precinctIndex
Definition: T1Structs.h:194
bool initialized
Definition: T1Structs.h:197
void deleteTagTrees(void)
Definition: T1Structs.cpp:74
~Precinct(void)
Definition: T1Structs.cpp:58
Precinct(void)
Definition: T1Structs.cpp:52
uint32_t getCblkGridwidth(void)
Definition: T1Structs.cpp:84
Definition: T1Structs.h:157
PrecinctImpl()
Definition: T1Structs.cpp:106
DecompressCodeblock * dec
Definition: T1Structs.h:170
CompressCodeblock * enc
Definition: T1Structs.h:169
TagTree * imsbtree
Definition: T1Structs.h:172
~PrecinctImpl()
Definition: T1Structs.cpp:111
uint32_t cblk_grid_height
Definition: T1Structs.h:168
bool init(bool isCompressor, grk_rect_u32 *bounds, grk_pt cblk_expn, grk_plugin_tile *current_plugin_tile)
Definition: T1Structs.cpp:117
TagTree * incltree
Definition: T1Structs.h:171
uint32_t cblk_grid_width
Definition: T1Structs.h:167
void deleteTagTrees()
Definition: T1Structs.cpp:180
void initTagTrees()
Definition: T1Structs.cpp:187
Definition: T1Structs.h:228
bool initialized
Definition: T1Structs.h:236
uint32_t numBandWindows
Definition: T1Structs.h:239
uint32_t pw
Definition: T1Structs.h:240
grk_pt precinct_expn
Definition: T1Structs.h:243
uint32_t ph
Definition: T1Structs.h:240
Resolution()
Definition: T1Structs.cpp:542
grk_pt precinct_start
Definition: T1Structs.h:242
bool init(bool isCompressor, TileComponentCodingParams *tccp, uint8_t resno, grk_plugin_tile *current_plugin_tile)
Definition: T1Structs.cpp:558
grk_pt cblk_expn
Definition: T1Structs.h:241
Subband band[BAND_NUM_INDICES]
Definition: T1Structs.h:237
grk_plugin_tile * current_plugin_tile
Definition: T1Structs.h:244
void print()
Definition: T1Structs.cpp:550
Definition: T1Structs.h:62
void clear()
Definition: T1Structs.cpp:26
uint32_t maxpasses
Definition: T1Structs.h:69
uint32_t len
Definition: T1Structs.h:68
uint32_t numBytesInPacket
Definition: T1Structs.h:71
uint32_t numPassesInPacket
Definition: T1Structs.h:70
Segment()
Definition: T1Structs.cpp:23
uint32_t numpasses
Definition: T1Structs.h:67
uint32_t dataindex
Definition: T1Structs.h:66
Definition: T1Structs.h:203
Precinct * getPrecinct(uint64_t precinctIndex)
Definition: T1Structs.cpp:495
eBandOrientation orientation
Definition: T1Structs.h:218
Subband & operator=(const Subband &rhs)
Definition: T1Structs.cpp:479
uint32_t numbps
Definition: T1Structs.h:223
Precinct * createPrecinct(bool isCompressor, uint64_t precinctIndex, grk_pt precinct_start, grk_pt precinct_expn, uint32_t pw, grk_pt cblk_expn, grk_plugin_tile *current_plugin_tile)
Definition: T1Structs.cpp:503
void print()
Definition: T1Structs.cpp:486
float stepsize
Definition: T1Structs.h:224
bool isEmpty()
Definition: T1Structs.cpp:491
std::vector< Precinct * > precincts
Definition: T1Structs.h:219
std::map< uint64_t, uint64_t > precinctMap
Definition: T1Structs.h:221
Subband()
Definition: T1Structs.cpp:463
uint64_t numPrecincts
Definition: T1Structs.h:222
Tile-component coding parameters.
Definition: CodingParams.h:49
Definition: TileComponent.h:30
Definition: TileProcessor.h:37