Grok 20.3.2
CodeStreamCompress.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016-2026 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
20namespace grk
21{
22
24{
25public:
26 explicit CodeStreamCompress(IStream* stream);
27 virtual ~CodeStreamCompress() = default;
28
29 static char* convertProgressionOrder(GRK_PROG_ORDER prg_order);
30 static uint16_t getPocSize(uint16_t num_components, uint32_t l_nb_poc);
31
32 bool start(void) override;
33 bool init(grk_cparameters* param, GrkImage* image) override;
34 uint64_t compress(grk_plugin_tile* tile) override;
35
36private:
37 bool init_header_writing(void);
38 bool end(void);
39 bool writeTilePart(ITileProcessorCompress* tileProcessor);
40 bool writeTileParts(ITileProcessorCompress* tileProcessor);
41 bool updateRates(void);
42 bool compressValidation(void);
43 bool mct_validation(void);
44
49 bool write_soc();
50
55 bool write_siz();
56
61 bool write_cap();
62
67 bool write_com();
68
73 bool write_cod();
74
83 bool compare_coc(uint16_t first_comp_no, uint16_t second_comp_no);
84
92 bool write_coc(uint16_t comp_no, IStream* stream);
93
94 bool write_coc(uint16_t comp_no);
95
100 bool write_qcd();
101
110 bool compare_qcc(uint16_t first_comp_no, uint16_t second_comp_no);
111
120 bool write_qcc(uint16_t tile_index, uint16_t comp_no, IStream* stream);
121
122 bool write_qcc(uint16_t comp_no);
123
128 bool writePoc();
129
134 bool write_tlm_end();
135
140 bool write_tlm_begin();
141
150 bool compare_SPCod_SPCoc(uint16_t first_comp_no, uint16_t second_comp_no);
151
159 bool write_SPCod_SPCoc(uint16_t comp_no);
160
168 uint32_t get_SPCod_SPCoc_size(uint16_t comp_no);
169
178 uint32_t get_SQcd_SQcc_size(uint16_t comp_no);
179
188 bool compare_SQcd_SQcc(uint16_t first_comp_no, uint16_t second_comp_no);
189
196 bool write_SQcd_SQcc(uint16_t comp_no);
197
205 bool write_mct_record(grk_mct_data* p_mct_record, IStream* stream);
206
215
220 bool write_mco();
221
226 bool write_cbd();
227
232 bool write_all_coc();
233
238 bool write_all_qcc();
239
244 bool write_regions();
245
254 bool write_rgn(uint16_t tile_no, uint16_t comp_no, uint16_t nb_comps);
255
260 bool write_eoc();
261
267
278 bool getNumTileParts(uint32_t* p_nb_tile_parts, GrkImage* image);
279
290 uint8_t getNumTilePartsForProgression(uint32_t prog_iter_num, uint16_t tileno);
291
303 bool validateProgressionOrders(const grk_progression* progressions, uint32_t numProgressions,
304 uint8_t numresolutions, uint16_t numcomps, uint16_t numlayers);
305
307
309};
310
311} // namespace grk
bool write_regions()
Writes regions of interests.
Definition CodeStreamCompress.cpp:1362
bool getNumTileParts(uint32_t *p_nb_tile_parts, GrkImage *image)
Calculates the total number of tile parts needed by the compressor to compress such an image.
Definition CodeStreamCompress.cpp:1977
bool writeTilePart(ITileProcessorCompress *tileProcessor)
Definition CodeStreamCompress.cpp:882
static uint16_t getPocSize(uint16_t num_components, uint32_t l_nb_poc)
Definition CodeStreamCompress.cpp:1696
bool compare_SPCod_SPCoc(uint16_t first_comp_no, uint16_t second_comp_no)
Compare 2 a SPCod/ SPCoc elements, i.e.
Definition CodeStreamCompress.cpp:1555
bool write_siz()
Writes the SIZ marker (image and tile size).
Definition CodeStreamCompress.cpp:1070
bool init(grk_cparameters *param, GrkImage *image) override
Definition CodeStreamCompress.cpp:164
bool compressValidation(void)
Definition CodeStreamCompress.cpp:1040
bool write_mcc_record(grk_simple_mcc_decorrelation_data *p_mcc_record, IStream *stream)
Writes the MCC marker (Multiple Component Collection).
Definition CodeStreamCompress.cpp:1376
bool write_com()
Writes the COM marker (comment).
Definition CodeStreamCompress.cpp:1081
bool write_all_qcc()
Writes QCC marker for each component.
Definition CodeStreamCompress.cpp:1349
bool mct_validation(void)
Definition CodeStreamCompress.cpp:112
static char * convertProgressionOrder(GRK_PROG_ORDER prg_order)
Definition CodeStreamCompress.cpp:102
bool write_cbd()
Writes the CBD marker (Component bit depth definition).
Definition CodeStreamCompress.cpp:1501
bool write_qcd()
Writes the QCD marker (quantization default).
Definition CodeStreamCompress.cpp:1187
bool write_mco()
Writes the MCO marker (Multiple component transformation ordering).
Definition CodeStreamCompress.cpp:1471
bool write_mct_record(grk_mct_data *p_mct_record, IStream *stream)
Writes the MCT marker (Multiple Component Transform).
Definition CodeStreamCompress.cpp:823
bool write_rgn(uint16_t tile_no, uint16_t comp_no, uint16_t nb_comps)
Writes the RGN marker (Region Of Interest).
Definition CodeStreamCompress.cpp:782
bool compare_coc(uint16_t first_comp_no, uint16_t second_comp_no)
Compares 2 COC markers (Coding style component).
Definition CodeStreamCompress.cpp:1177
bool writePoc()
Writes the POC marker (Progression Order Change).
Definition CodeStreamCompress.cpp:1243
bool write_all_coc()
Writes COC marker for each component.
Definition CodeStreamCompress.cpp:1335
uint32_t get_SPCod_SPCoc_size(uint16_t comp_no)
Gets the size taken by writing a SPCod or SPCoc for the given tile and component.
Definition CodeStreamCompress.cpp:1543
bool start(void) override
Definition CodeStreamCompress.cpp:146
uint8_t getNumTilePartsForProgression(uint32_t prog_iter_num, uint16_t tileno)
Gets the number of tile parts used for the given change of progression (if any) and the given tile.
Definition CodeStreamCompress.cpp:1918
bool write_tlm_end()
End writing the updated tlm.
Definition CodeStreamCompress.cpp:1539
virtual ~CodeStreamCompress()=default
bool writeTileParts(ITileProcessorCompress *tileProcessor)
Definition CodeStreamCompress.cpp:931
bool write_coc(uint16_t comp_no, IStream *stream)
Writes the COC marker (Coding style component).
bool write_mct_data_group()
Writes the CBD-MCT-MCC-MCO markers (Multi components transform).
Definition CodeStreamCompress.cpp:1310
bool write_cod()
Writes the COD marker (Coding style default).
Definition CodeStreamCompress.cpp:1114
bool write_tlm_begin()
Begin writing the TLM marker (Tile Length Marker).
Definition CodeStreamCompress.cpp:1532
bool write_eoc()
Writes the EOC marker (End of Codestream).
Definition CodeStreamCompress.cpp:816
bool compare_SQcd_SQcc(uint16_t first_comp_no, uint16_t second_comp_no)
Compares 2 SQcd or SQcc element, i.e.
Definition CodeStreamCompress.cpp:1629
bool compare_qcc(uint16_t first_comp_no, uint16_t second_comp_no)
Compare QCC markers (quantization component).
Definition CodeStreamCompress.cpp:1239
bool end(void)
Definition CodeStreamCompress.cpp:772
bool write_SPCod_SPCoc(uint16_t comp_no)
Writes a SPCod or SPCoc element, i.e.
Definition CodeStreamCompress.cpp:1584
bool init_header_writing(void)
Definition CodeStreamCompress.cpp:852
CodeStreamCompress(IStream *stream)
Definition CodeStreamCompress.cpp:100
bool write_SQcd_SQcc(uint16_t comp_no)
Writes a SQcd or SQcc element, i.e.
Definition CodeStreamCompress.cpp:1666
bool validateProgressionOrders(const grk_progression *progressions, uint32_t numProgressions, uint8_t numresolutions, uint16_t numcomps, uint16_t numlayers)
Validate progression orders.
Definition CodeStreamCompress.cpp:1702
bool updateRates(void)
Definition CodeStreamCompress.cpp:980
bool init_mct_encoding(TileCodingParams *tcp, GrkImage *image)
Definition CodeStreamCompress.cpp:1769
bool write_cap()
Writes the CAP marker.
Definition CodeStreamCompress.cpp:1076
bool write_qcc(uint16_t tile_index, uint16_t comp_no, IStream *stream)
Writes the QCC marker (quantization component).
uint64_t compress(grk_plugin_tile *tile) override
Definition CodeStreamCompress.cpp:674
bool write_soc()
Writes the SOC marker (Start Of Codestream).
Definition CodeStreamCompress.cpp:1066
uint32_t totalTileParts_
Definition CodeStreamCompress.h:308
uint32_t get_SQcd_SQcc_size(uint16_t comp_no)
Gets the size taken by writing SQcd or SQcc element, i.e.
Definition CodeStreamCompress.cpp:1619
CodeStream(IStream *stream)
Definition CodeStream.cpp:38
Stores header and data for an image.
Definition GrkImage.h:54
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Environment variables.
ResWindow.
Definition CompressedChunkCache.h:36
Definition ICompressor.h:24
Definition IStream.h:60
Interface for managing tile compression.
Definition ITileProcessorCompress.h:31
Tile coding parameters : this structure is used to store coding/decoding parameters common to all til...
Definition CodingParams.h:124
MCT data.
Definition CodingParams.h:97
MCC decorrelation data.
Definition CodingParams.h:109
Compression parameters.
Plugin tile.
Progression order change (POC).