Grok 12.0.1
TileProcessor.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016-2024 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#include "grk_includes.h"
24#include <queue>
25#include <mutex>
26
27namespace grk
28{
29/*
30 * Tile structure.
31 *
32 * Tile bounds are in canvas coordinates, and are equal to the
33 * full, non-windowed, unreduced tile dimensions,
34 * while the component dimensions are reduced
35 * if there is a resolution reduction.
36 *
37 */
38struct Tile : public grk_rect32
39{
40 Tile();
41 explicit Tile(uint16_t numcomps);
42 virtual ~Tile();
45 double distortion;
47};
48
70
75class mct;
76
78{
79 explicit TileProcessor(uint16_t index, CodeStream* codeStream, BufferedStream* stream,
82 bool init(void);
84 void deallocBuffers();
85 bool preCompressTile(void);
86 bool canWritePocMarker(void);
88 bool doCompress(void);
91 bool needsRateControl();
92 void ingestImage();
95 GrkImage* getImage(void);
97 void setCorruptPacket(void);
104 bool canPreCalculateTileLen(void);
105 uint16_t getIndex(void) const;
106 void incrementIndex(void);
107 Tile* getTile(void);
108 Scheduler* getScheduler(void);
109 bool isCompressor(void);
110
129 bool lastTilePartInCodeStream);
131 void incNumProcessedPackets(void);
134 void incNumDecompressedPackets(void);
135
136 private:
137 bool isWholeTileDecompress(uint16_t compno);
138 bool needsMctDecompress(uint16_t compno);
139 bool needsMctDecompress(void);
142 bool mct_encode();
143 bool dwt_encode();
144 void t1_encode();
149 void makeLayerFinal(uint32_t layno);
151 void makeLayerSimple(uint32_t layno, double thresh, bool finalAttempt);
152
156 std::atomic<uint64_t> numDecompressedPackets;
157 // Decompressing Only
161 // Compressing only - track which packets have already been written
162 // to the code stream
168 // coding/decoding parameters for this tile
176};
177
178} // namespace grk
Definition FlowComponent.h:21
Definition CodeStreamDecompress.h:38
Definition CodeStream.h:133
Definition GrkImage.h:24
Definition PLCache.h:26
Definition Scheduler.h:22
Definition StripCache.h:110
Definition mct.h:53
enum _GRK_TILE_CACHE_STRATEGY GRK_TILE_CACHE_STRATEGY
Copyright (C) 2016-2024 Grok Image Compression Inc.
Definition ICacheable.h:20
void grk_read(const uint8_t *buffer, TYPE *value, uint32_t numBytes)
Definition BufferedStream.h:239
const uint16_t maxCompressLayersGRK
Definition CodeStreamLimits.h:43
Plugin tile.
Definition grok.h:808
Definition BufferedStream.h:35
Coding parameters.
Definition CodingParams.h:245
Definition TileProcessor.h:50
uint8_t * bits
Definition TileProcessor.h:59
void init(uint32_t numcomps, uint32_t numres, uint64_t numprec, uint32_t numlayers)
Definition TileProcessor.cpp:1507
uint32_t numres_
Definition TileProcessor.h:62
bool is_packet_encoded(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer)
Definition TileProcessor.cpp:1552
PacketTracker()
Definition TileProcessor.cpp:1501
uint64_t get_buffer_len(uint32_t numcomps, uint32_t numres, uint64_t numprec, uint32_t numlayers)
Definition TileProcessor.cpp:1534
void clear(void)
Definition TileProcessor.cpp:1529
uint64_t index(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer)
Definition TileProcessor.cpp:1563
uint64_t numprec_
Definition TileProcessor.h:63
uint32_t numcomps_
Definition TileProcessor.h:61
void packet_encoded(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer)
Definition TileProcessor.cpp:1541
~PacketTracker()
Definition TileProcessor.cpp:1503
uint32_t numlayers_
Definition TileProcessor.h:64
Tile coding parameters : this structure is used to store coding/decoding parameters common to all til...
Definition CodingParams.h:122
Definition TileComponent.h:28
Definition TileProcessor.h:39
Tile()
Definition TileProcessor.cpp:1485
virtual ~Tile()
Definition TileProcessor.cpp:1497
TileComponent * comps
Definition TileProcessor.h:44
double layerDistoration[maxCompressLayersGRK]
Definition TileProcessor.h:46
uint16_t numcomps_
Definition TileProcessor.h:43
double distortion
Definition TileProcessor.h:45
Definition TileProcessor.h:78
bool rateAllocate(uint32_t *allPacketBytes, bool disableRateControl)
Definition TileProcessor.cpp:1135
~TileProcessor()
Definition TileProcessor.cpp:36
GrkImage * getImage(void)
Definition TileProcessor.cpp:160
GrkImage * image_
Definition TileProcessor.h:171
uint32_t getPreCalculatedTileLen(void)
Definition TileProcessor.cpp:125
bool corrupt_packet_
Definition TileProcessor.h:165
void t1_encode()
Definition TileProcessor.cpp:804
bool mct_encode()
Definition TileProcessor.cpp:761
bool pcrdBisectSimple(uint32_t *p_data_written, bool disableRateControl)
Definition TileProcessor.cpp:1170
uint64_t getNumDecompressedPackets(void)
Definition TileProcessor.cpp:113
PacketTracker packetTracker_
Definition TileProcessor.h:163
bool needsRateControl()
Definition TileProcessor.cpp:1145
Tile * tile
Definition TileProcessor.h:153
TileCodingParams * getTileCodingParams(void)
Definition TileProcessor.cpp:182
bool first_poc_tile_part_
Compression Only true for first POC tile part, otherwise false.
Definition TileProcessor.h:113
void makeLayerSimple(uint32_t layno, double thresh, bool finalAttempt)
Definition TileProcessor.cpp:1336
PacketTracker * getPacketTracker(void)
Definition TileProcessor.cpp:178
GrkImage * headerImage
Definition TileProcessor.h:122
bool dcLevelShiftCompress()
Definition TileProcessor.cpp:718
uint32_t pino
Compression Only Current packet iterator number.
Definition TileProcessor.h:121
bool isWholeTileDecompress(uint16_t compno)
Returns whether a tile component should be fully decompressed, taking into account win_* members.
Definition TileProcessor.cpp:418
Scheduler * getScheduler(void)
Definition TileProcessor.cpp:146
bool truncated
Definition TileProcessor.h:170
void makeLayerFinal(uint32_t layno)
Definition TileProcessor.cpp:1429
bool setTilePartDataLength(uint16_t tilePart, uint32_t tilePartLength, bool lastTilePartInCodeStream)
Definition TileProcessor.cpp:62
void generateImage(GrkImage *src_image, Tile *src_tile)
Definition TileProcessor.cpp:154
void incNumProcessedPackets(void)
Definition TileProcessor.cpp:105
BufferedStream * stream_
Definition TileProcessor.h:164
bool preCompressTile(void)
Definition TileProcessor.cpp:928
bool subtractMarkerSegmentLength(uint16_t markerLen)
Definition TileProcessor.cpp:46
uint16_t getIndex(void) const
Definition TileProcessor.cpp:134
void deallocBuffers()
Definition TileProcessor.cpp:303
uint8_t tilePartCounter_
Compressing Only index of tile part being currently coding.
Definition TileProcessor.h:118
bool canWritePocMarker(void)
Definition TileProcessor.cpp:387
uint32_t preCalculatedTileLen
Definition TileProcessor.h:174
uint64_t getNumProcessedPackets(void)
Definition TileProcessor.cpp:101
Tile * getTile(void)
Definition TileProcessor.cpp:142
bool isCompressor_
Definition TileProcessor.h:172
bool createWindowBuffers(const GrkImage *outputImage)
Definition TileProcessor.cpp:268
Scheduler * scheduler_
Definition TileProcessor.h:154
void setCorruptPacket(void)
bool mctDecompress(FlowComponent *flow)
Definition TileProcessor.cpp:692
bool encodeT2(uint32_t *packet_bytes_written)
Definition TileProcessor.cpp:828
void release(GRK_TILE_CACHE_STRATEGY strategy)
Definition TileProcessor.cpp:164
bool doCompress(void)
Definition TileProcessor.cpp:311
uint64_t getTilePartDataLength(void)
Definition TileProcessor.cpp:42
grk_rect32 getUnreducedTileWindow(void)
Definition TileProcessor.cpp:298
bool isCompressor(void)
Definition TileProcessor.cpp:150
uint8_t getMaxNumDecompressResolutions(void)
Definition TileProcessor.cpp:186
bool layerNeedsRateControl(uint32_t layno)
Definition TileProcessor.cpp:1139
mct * mct_
Definition TileProcessor.h:175
bool ingestUncompressedData(uint8_t *p_src, uint64_t src_length)
Definition TileProcessor.cpp:980
std::atomic< uint64_t > numDecompressedPackets
Definition TileProcessor.h:156
bool init(void)
Definition TileProcessor.cpp:203
grk_plugin_tile * current_plugin_tile
Definition TileProcessor.h:123
bool dwt_encode()
Definition TileProcessor.cpp:788
bool writeTilePartT2(uint32_t *tileBytesWritten)
Definition TileProcessor.cpp:394
uint64_t tilePartDataLength
Definition TileProcessor.h:158
bool makeSingleLosslessLayer()
Definition TileProcessor.cpp:1156
TileCodingParams * tcp_
Definition TileProcessor.h:169
grk_rect32 unreducedImageWindow
Definition TileProcessor.h:173
bool cacheTilePartPackets(CodeStreamDecompress *codeStream)
Definition TileProcessor.cpp:1038
bool decompressT2T1(GrkImage *outputImage)
Definition TileProcessor.cpp:434
uint16_t tileIndex_
index of tile being currently compressed/decompressed
Definition TileProcessor.h:160
void incrementIndex(void)
Definition TileProcessor.cpp:138
uint64_t numProcessedPackets
Definition TileProcessor.h:155
BufferedStream * getStream(void)
Definition TileProcessor.cpp:121
void ingestImage()
Definition TileProcessor.cpp:643
bool needsMctDecompress(void)
Definition TileProcessor.cpp:665
TileProcessor(uint16_t index, CodeStream *codeStream, BufferedStream *stream, bool isCompressor, StripCache *stripCache)
Definition TileProcessor.cpp:24
CodingParams * cp_
Definition TileProcessor.h:124
bool canPreCalculateTileLen(void)
Definition TileProcessor.cpp:129
PLCache packetLengthCache
Definition TileProcessor.h:125
uint32_t newTilePartProgressionPosition
position of the tile part flag in progression order
Definition TileProcessor.h:167
void incNumDecompressedPackets(void)
Definition TileProcessor.cpp:117