Grok  7.6.6
TileProcessor.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 #include "grk_includes.h"
24 
25 namespace grk {
26 
27 struct TileComponent;
28 
29 /*
30  * Tile structure.
31  *
32  * Tile bounds are relative to origin, and are equal to the unreduced
33  * tile dimensions, while the component dimensions are reduced
34  * if there is a resolution reduction.
35  *
36  */
37 struct grk_tile : public grk_rect_u32 {
38  grk_tile();
39  ~grk_tile();
40 
41  uint32_t numcomps;
43  double distotile;
44  double distolayer[100];
45  uint64_t packno;
46 };
47 
49  PacketTracker();
51  void init(uint32_t numcomps, uint32_t numres, uint64_t numprec, uint32_t numlayers);
52  void clear(void);
53  void packet_encoded(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer);
54  bool is_packet_encoded(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer);
55 private:
56  uint8_t *bits;
57 
58  uint32_t m_numcomps;
59  uint32_t m_numres;
60  uint64_t m_numprec;
61  uint32_t m_numlayers;
62 
63  uint64_t get_buffer_len(uint32_t numcomps, uint32_t numres, uint64_t numprec, uint32_t numlayers);
64  uint64_t index(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer);
65 };
66 
70 struct TileProcessor {
71  explicit TileProcessor(CodeStream *codeStream, BufferedStream *stream) ;
73 
82  bool init(GrkImage *output_image, bool isCompressor);
83 
84  bool pre_write_tile(void);
85 
91  bool compress_tile_part(uint32_t *tile_bytes_written);
92 
94 
99  bool do_compress(void);
100 
101 
106  bool decompress_tile_t1(void);
107 
113  bool decompress_tile_t2(ChunkBuffer *src_buf);
114 
118  bool copy_uncompressed_data_to_tile(uint8_t *p_src, uint64_t src_length);
119  bool needs_rate_control();
120  void copy_image_to_tile();
121  bool prepare_sod_decoding(CodeStream *codeStream);
122 
124  uint16_t m_tile_index;
125 
129 
135 
136  // Decompressing Only
138 
141  uint8_t totnum_tp;
142 
145  uint32_t pino;
146 
152 
153  // true if whole tile will be decoded; false if tile window will be decoded
155 
157 
160 
161  // Compressing only - track which packets have been already written
162  // to the code stream
166 private:
167 
169  uint32_t tp_pos;
170 
171  // coding/decoding parameters for this tile
173 
174  bool t2_decompress(ChunkBuffer *src_buf, uint64_t *p_data_read);
175 
176  bool is_whole_tilecomp_decoding( uint32_t compno);
177 
178  bool need_mct_decompress(uint32_t compno);
179 
180  bool mct_decompress();
181 
183 
184  bool dc_level_shift_encode();
185 
186  bool mct_encode();
187 
188  bool dwt_encode();
189 
190  void t1_encode();
191 
192  bool t2_encode(uint32_t *packet_bytes_written);
193 
194  bool rate_allocate(void);
195 
196  bool layer_needs_rate_control(uint32_t layno);
197 
199 
200  void makelayer_final(uint32_t layno);
201 
202  bool pcrd_bisect_simple(uint32_t *p_data_written);
203 
204  void make_layer_simple(uint32_t layno, double thresh,
205  bool final);
206 
207  bool pcrd_bisect_feasible(uint32_t *p_data_written);
208 
209  void makelayer_feasible(uint32_t layno, uint16_t thresh,
210  bool final);
211 
212 
213 };
214 
215 }
Definition: GrkImage.h:11
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: BitIO.cpp:23
Plugin tile.
Definition: grok.h:1254
Byte input-output stream.
Definition: BufferedStream.h:38
Definition: ChunkBuffer.h:29
Definition: CodeStream.h:163
Coding parameters.
Definition: CodingParams.h:238
Definition: LengthMarkers.h:88
Definition: TileProcessor.h:48
uint8_t * bits
Definition: TileProcessor.h:56
void init(uint32_t numcomps, uint32_t numres, uint64_t numprec, uint32_t numlayers)
Definition: TileProcessor.cpp:1362
uint64_t m_numprec
Definition: TileProcessor.h:60
bool is_packet_encoded(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer)
Definition: TileProcessor.cpp:1419
uint32_t m_numres
Definition: TileProcessor.h:59
PacketTracker()
Definition: TileProcessor.cpp:1351
uint64_t get_buffer_len(uint32_t numcomps, uint32_t numres, uint64_t numprec, uint32_t numlayers)
Definition: TileProcessor.cpp:1392
void clear(void)
Definition: TileProcessor.cpp:1386
uint64_t index(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer)
Definition: TileProcessor.cpp:1438
void packet_encoded(uint32_t comps, uint32_t res, uint64_t prec, uint32_t layer)
Definition: TileProcessor.cpp:1400
~PacketTracker()
Definition: TileProcessor.cpp:1358
uint32_t m_numcomps
Definition: TileProcessor.h:58
uint32_t m_numlayers
Definition: TileProcessor.h:61
Tile coding parameters : this structure is used to store coding/decoding parameters common to all til...
Definition: CodingParams.h:121
Definition: TileComponent.h:30
Tile compressor/decompressor.
Definition: TileProcessor.h:70
~TileProcessor()
Definition: TileProcessor.cpp:53
bool needs_rate_control()
Definition: TileProcessor.cpp:77
void t1_encode()
Definition: TileProcessor.cpp:1012
CodingParams * m_cp
Coding parameters.
Definition: TileProcessor.h:159
TileCodingParams * m_tcp
Definition: TileProcessor.h:172
bool mct_encode()
Definition: TileProcessor.cpp:963
PacketTracker m_packetTracker
Definition: TileProcessor.h:163
bool m_first_poc_tile_part
Compressing Only true for first POC tile part, otherwise false.
Definition: TileProcessor.h:128
void makelayer_feasible(uint32_t layno, uint16_t thresh, bool final)
Definition: TileProcessor.cpp:95
bool pcrd_bisect_feasible(uint32_t *p_data_written)
Definition: TileProcessor.cpp:181
void makelayer_final(uint32_t layno)
Definition: TileProcessor.cpp:543
bool make_single_lossless_layer()
Definition: TileProcessor.cpp:87
bool pcrd_bisect_simple(uint32_t *p_data_written)
Definition: TileProcessor.cpp:314
void copy_image_to_tile()
Definition: TileProcessor.cpp:845
GrkImage * image
image header
Definition: TileProcessor.h:150
bool layer_needs_rate_control(uint32_t layno)
Definition: TileProcessor.cpp:69
BufferedStream * m_stream
Definition: TileProcessor.h:164
uint32_t pino
Compressing Only Current packet iterator number.
Definition: TileProcessor.h:145
bool copy_uncompressed_data_to_tile(uint8_t *p_src, uint64_t src_length)
Copies tile data from the given memory block onto the system.
Definition: TileProcessor.cpp:1193
bool t2_decompress(ChunkBuffer *src_buf, uint64_t *p_data_read)
Definition: TileProcessor.cpp:865
uint32_t tp_pos
position of the tile part flag in progression order
Definition: TileProcessor.h:169
bool wholeTileDecompress
Definition: TileProcessor.h:154
bool do_compress(void)
Compress tile.
Definition: TileProcessor.cpp:666
bool mct_decompress()
Definition: TileProcessor.cpp:897
TileProcessor(CodeStream *codeStream, BufferedStream *stream)
Definition: TileProcessor.cpp:28
bool prepare_sod_decoding(CodeStream *codeStream)
Definition: TileProcessor.cpp:1247
bool compress_tile_part(uint32_t *tile_bytes_written)
Compress tile part.
Definition: TileProcessor.cpp:722
bool rate_allocate(void)
Definition: TileProcessor.cpp:1120
bool need_mct_decompress(uint32_t compno)
Definition: TileProcessor.cpp:874
uint8_t totnum_tp
Compressing Only Total number of tile parts of the tile.
Definition: TileProcessor.h:141
void make_layer_simple(uint32_t layno, double thresh, bool final)
Definition: TileProcessor.cpp:469
bool is_whole_tilecomp_decoding(uint32_t compno)
Returns whether a tile component should be fully decompressed, taking into account win_* members.
Definition: TileProcessor.cpp:745
grk_tile * tile
info on image tile
Definition: TileProcessor.h:148
bool decompress_tile_t1(void)
T1 decompress.
Definition: TileProcessor.cpp:792
bool pre_write_tile(void)
Definition: TileProcessor.cpp:1145
grk_plugin_tile * current_plugin_tile
Definition: TileProcessor.h:151
bool dwt_encode()
Definition: TileProcessor.cpp:996
bool init(GrkImage *output_image, bool isCompressor)
Initializes tile processor (no buffer memory is allocated)
Definition: TileProcessor.cpp:589
bool dc_level_shift_encode()
Definition: TileProcessor.cpp:939
uint16_t m_tile_index
index of tile being currently compressed/decompressed
Definition: TileProcessor.h:124
bool decompress_tile_t2(ChunkBuffer *src_buf)
T2 decompress.
Definition: TileProcessor.cpp:764
bool pre_compress_first_tile_part(void)
Definition: TileProcessor.cpp:702
uint8_t m_tile_part_index
Compressing Only index of tile part being currently coding.
Definition: TileProcessor.h:134
bool dc_level_shift_decompress()
Definition: TileProcessor.cpp:926
PacketLengthMarkers * plt_markers
Definition: TileProcessor.h:156
bool m_corrupt_packet
Definition: TileProcessor.h:165
bool t2_encode(uint32_t *packet_bytes_written)
Definition: TileProcessor.cpp:1033
uint32_t tile_part_data_length
Definition: TileProcessor.h:137
Definition: TileProcessor.h:37
~grk_tile()
Definition: TileProcessor.cpp:1344
TileComponent * comps
Definition: TileProcessor.h:42
double distotile
Definition: TileProcessor.h:43
uint64_t packno
Definition: TileProcessor.h:45
double distolayer[100]
Definition: TileProcessor.h:44
uint32_t numcomps
Definition: TileProcessor.h:41
grk_tile()
Definition: TileProcessor.cpp:1335