Grok  9.7.5
TileProcessor.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 #include "grk_includes.h"
24 #include <queue>
25 #include <mutex>
26 
27 namespace 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  */
38 struct Tile : public grk_rect32
39 {
40  Tile();
41  explicit Tile(uint16_t numcomps);
42  virtual ~Tile();
43  uint16_t numcomps_;
45  double distortion;
47 };
48 
50 {
51  PacketTracker();
53  void init(uint32_t numcomps, uint32_t numres, uint64_t numprec, uint32_t numlayers);
54  void clear(void);
55  void packet_encoded(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer);
56  bool is_packet_encoded(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer);
57 
58  private:
59  uint8_t* bits;
60 
61  uint32_t numcomps_;
62  uint32_t numres_;
63  uint64_t numprec_;
64  uint32_t numlayers_;
65 
66  uint64_t get_buffer_len(uint32_t numcomps, uint32_t numres, uint64_t numprec,
67  uint32_t numlayers);
68  uint64_t index(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer);
69 };
70 
76 {
77  explicit TileProcessor(uint16_t index, CodeStream* codeStream, IBufferedStream* stream,
78  bool isCompressor, bool isWholeTileDecompress);
80  bool init(void);
81  bool allocWindowBuffers(const GrkImage* outputImage);
82  void deallocBuffers();
83  bool preCompressTile(void);
84  bool canWritePocMarker(void);
85  bool writeTilePartT2(uint32_t* tileBytesWritten);
86  bool doCompress(void);
87  bool decompressT2(SparseBuffer* srcBuf);
88  bool decompressT2T1(TileCodingParams* tcp, GrkImage* outputImage, bool doPost);
89  bool ingestUncompressedData(uint8_t* p_src, uint64_t src_length);
90  bool needsRateControl();
91  void ingestImage();
93  void generateImage(GrkImage* src_image, Tile* src_tile);
94  GrkImage* getImage(void);
95  void release(GRK_TILE_CACHE_STRATEGY strategy);
96  void setCorruptPacket(void);
100  uint8_t getMaxNumDecompressResolutions(void);
101  IBufferedStream* getStream(void);
102  uint32_t getPreCalculatedTileLen(void);
103  bool canPreCalculateTileLen(void);
104  uint16_t getIndex(void) const;
105  void incrementIndex(void);
106  Tile* getTile(void);
107  Scheduler* getScheduler(void);
108 
119  uint32_t pino;
122  // true if whole tile will be decoded; false if tile window will be decoded
126  uint64_t getTilePartDataLength(void);
127  bool subtractMarkerLength(uint16_t markerLen);
128  bool setTilePartDataLength(uint32_t tilePartLength, bool lastTilePartInCodeStream);
129  uint64_t getNumProcessedPackets(void);
130  void incNumProcessedPackets(uint64_t numPackets);
131  uint64_t getNumDecompressedPackets(void);
132  void incNumDecompressedPackets(uint64_t numPackets);
133 
134  private:
135  bool isWholeTileDecompress(uint16_t compno);
136  bool needsMctDecompress(uint16_t compno);
137  bool mctDecompress();
138  bool dcLevelShiftDecompress();
139  bool dcLevelShiftCompress();
140  bool mct_encode();
141  bool dwt_encode();
142  void t1_encode();
143  bool encodeT2(uint32_t* packet_bytes_written);
144  bool rateAllocate(uint32_t* allPacketBytes);
145  bool layerNeedsRateControl(uint32_t layno);
147  void makeLayerFinal(uint32_t layno);
148  bool pcrdBisectSimple(uint32_t* p_data_written);
149  void makeLayerSimple(uint32_t layno, double thresh, bool finalAttempt);
150  bool pcrdBisectFeasible(uint32_t* p_data_written);
151  void makeLayerFeasible(uint32_t layno, uint16_t thresh, bool finalAttempt);
152 
157  // Decompressing Only
160  uint16_t tileIndex_;
161  // Compressing only - track which packets have already been written
162  // to the code stream
168  // coding/decoding parameters for this tile
170  bool truncated;
175 };
176 
177 } // namespace grk
Definition: CodeStreamDecompress.h:38
Definition: CodeStream.h:130
Definition: GrkImage.h:22
Definition: PLCache.h:26
Definition: Scheduler.h:22
GRK_TILE_CACHE_STRATEGY
Definition: grok.h:390
Copyright (C) 2016-2022 Grok Image Compression Inc.
Definition: ICacheable.h:20
const uint16_t maxCompressLayersGRK
Definition: CodeStreamLimits.h:43
Plugin tile.
Definition: grok.h:1095
Coding parameters.
Definition: CodingParams.h:244
Definition: IBufferedStream.h:20
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:1601
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:1646
PacketTracker()
Definition: TileProcessor.cpp:1595
uint64_t get_buffer_len(uint32_t numcomps, uint32_t numres, uint64_t numprec, uint32_t numlayers)
Definition: TileProcessor.cpp:1628
void clear(void)
Definition: TileProcessor.cpp:1623
uint64_t index(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer)
Definition: TileProcessor.cpp:1657
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:1635
~PacketTracker()
Definition: TileProcessor.cpp:1597
uint32_t numlayers_
Definition: TileProcessor.h:64
Definition: SparseBuffer.h:28
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:1579
virtual ~Tile()
Definition: TileProcessor.cpp:1591
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
Tile processor for decompression and compression.
Definition: TileProcessor.h:76
bool rateAllocate(uint32_t *allPacketBytes)
Definition: TileProcessor.cpp:1010
bool allocWindowBuffers(const GrkImage *outputImage)
Definition: TileProcessor.cpp:246
~TileProcessor()
Definition: TileProcessor.cpp:37
GrkImage * getImage(void)
Definition: TileProcessor.cpp:132
bool needsMctDecompress(uint16_t compno)
Definition: TileProcessor.cpp:512
GrkImage * image_
Definition: TileProcessor.h:171
uint32_t getPreCalculatedTileLen(void)
Definition: TileProcessor.cpp:101
bool corrupt_packet_
Definition: TileProcessor.h:165
void t1_encode()
Definition: TileProcessor.cpp:675
uint64_t numDecompressedPackets
Definition: TileProcessor.h:156
bool mct_encode()
Definition: TileProcessor.cpp:627
bool pcrdBisectFeasible(uint32_t *p_data_written)
Definition: TileProcessor.cpp:1132
uint64_t getNumDecompressedPackets(void)
Definition: TileProcessor.cpp:89
PacketTracker packetTracker_
Definition: TileProcessor.h:163
bool needsRateControl()
Definition: TileProcessor.cpp:1032
Tile * tile
Definition: TileProcessor.h:153
TileCodingParams * getTileCodingParams(void)
Definition: TileProcessor.cpp:158
bool first_poc_tile_part_
Compression Only true for first POC tile part, otherwise false.
Definition: TileProcessor.h:111
void makeLayerSimple(uint32_t layno, double thresh, bool finalAttempt)
Definition: TileProcessor.cpp:1430
void incNumDecompressedPackets(uint64_t numPackets)
Definition: TileProcessor.cpp:93
PacketTracker * getPacketTracker(void)
Definition: TileProcessor.cpp:154
bool setTilePartDataLength(uint32_t tilePartLength, bool lastTilePartInCodeStream)
Definition: TileProcessor.cpp:62
GrkImage * headerImage
Definition: TileProcessor.h:120
bool subtractMarkerLength(uint16_t markerLen)
Definition: TileProcessor.cpp:46
bool dcLevelShiftCompress()
Definition: TileProcessor.cpp:584
uint32_t pino
Compression Only Current packet iterator number.
Definition: TileProcessor.h:119
bool isWholeTileDecompress(uint16_t compno)
Returns whether a tile component should be fully decompressed, taking into account win_* members.
Definition: TileProcessor.cpp:382
Scheduler * getScheduler(void)
Definition: TileProcessor.cpp:122
bool truncated
Definition: TileProcessor.h:170
void makeLayerFinal(uint32_t layno)
Definition: TileProcessor.cpp:1523
void generateImage(GrkImage *src_image, Tile *src_tile)
Definition: TileProcessor.cpp:126
IBufferedStream * getStream(void)
Definition: TileProcessor.cpp:97
bool wholeTileDecompress
Definition: TileProcessor.h:123
bool preCompressTile(void)
Definition: TileProcessor.cpp:803
uint16_t getIndex(void) const
Definition: TileProcessor.cpp:110
void deallocBuffers()
Definition: TileProcessor.cpp:280
uint8_t tilePartCounter_
Compressing Only index of tile part being currently coding.
Definition: TileProcessor.h:116
bool canWritePocMarker(void)
Definition: TileProcessor.cpp:351
uint32_t preCalculatedTileLen
Definition: TileProcessor.h:174
uint64_t getNumProcessedPackets(void)
Definition: TileProcessor.cpp:81
Tile * getTile(void)
Definition: TileProcessor.cpp:118
bool isCompressor_
Definition: TileProcessor.h:172
Scheduler * scheduler_
Definition: TileProcessor.h:154
void setCorruptPacket(void)
Definition: TileProcessor.cpp:150
bool encodeT2(uint32_t *packet_bytes_written)
Definition: TileProcessor.cpp:699
void release(GRK_TILE_CACHE_STRATEGY strategy)
Definition: TileProcessor.cpp:136
bool doCompress(void)
Definition: TileProcessor.cpp:288
uint64_t getTilePartDataLength(void)
Definition: TileProcessor.cpp:42
grk_rect32 getUnreducedTileWindow(void)
Definition: TileProcessor.cpp:275
void incNumProcessedPackets(uint64_t numPackets)
Definition: TileProcessor.cpp:85
uint8_t getMaxNumDecompressResolutions(void)
Definition: TileProcessor.cpp:162
bool layerNeedsRateControl(uint32_t layno)
Definition: TileProcessor.cpp:1026
void makeLayerFeasible(uint32_t layno, uint16_t thresh, bool finalAttempt)
Definition: TileProcessor.cpp:1054
bool ingestUncompressedData(uint8_t *p_src, uint64_t src_length)
Definition: TileProcessor.cpp:852
bool init(void)
Definition: TileProcessor.cpp:179
grk_plugin_tile * current_plugin_tile
Definition: TileProcessor.h:121
bool dwt_encode()
Definition: TileProcessor.cpp:659
bool dcLevelShiftDecompress()
Definition: TileProcessor.cpp:567
IBufferedStream * stream_
Definition: TileProcessor.h:164
bool writeTilePartT2(uint32_t *tileBytesWritten)
Definition: TileProcessor.cpp:358
uint64_t tilePartDataLength
Definition: TileProcessor.h:158
bool decompressT2T1(TileCodingParams *tcp, GrkImage *outputImage, bool doPost)
Definition: TileProcessor.cpp:427
bool makeSingleLosslessLayer()
Definition: TileProcessor.cpp:1043
bool decompressT2(SparseBuffer *srcBuf)
Definition: TileProcessor.cpp:398
TileCodingParams * tcp_
Definition: TileProcessor.h:169
grk_rect32 unreducedImageWindow
Definition: TileProcessor.h:173
bool pcrdBisectSimple(uint32_t *p_data_written)
Definition: TileProcessor.cpp:1267
uint16_t tileIndex_
index of tile being currently compressed/decompressed
Definition: TileProcessor.h:160
void incrementIndex(void)
Definition: TileProcessor.cpp:114
uint64_t numProcessedPackets
Definition: TileProcessor.h:155
bool prepareSodDecompress(CodeStreamDecompress *codeStream)
Definition: TileProcessor.cpp:909
bool mctDecompress()
Definition: TileProcessor.cpp:537
void ingestImage()
Definition: TileProcessor.cpp:490
CodingParams * cp_
Definition: TileProcessor.h:124
bool canPreCalculateTileLen(void)
Definition: TileProcessor.cpp:105
TileProcessor(uint16_t index, CodeStream *codeStream, IBufferedStream *stream, bool isCompressor, bool isWholeTileDecompress)
Definition: TileProcessor.cpp:24
PLCache packetLengthCache
Definition: TileProcessor.h:125
uint32_t newTilePartProgressionPosition
position of the tile part flag in progression order
Definition: TileProcessor.h:167