Grok 20.3.2
CodeStream.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
20#include <unordered_map>
21#include <functional>
22
23#include "grok.h"
24#include "CodingParams.h"
25
26namespace grk
27{
28const uint32_t default_numbers_segments = 10;
29const uint32_t default_header_size = 4096;
30const uint32_t default_number_mcc_records = 10;
31const uint32_t default_number_mct_records = 10;
32
33// includes marker and marker length (4 bytes)
34const uint32_t sotMarkerSegmentLen = 12U;
35
36const uint32_t SPCodSPCocLen = 5U;
37const uint32_t codSocLen = 5U;
38const uint32_t tlmMarkerBytesPerTilePart = 6;
39
43const uint32_t GRK_DEFAULT_NUMRESOLUTION = 6;
44
45const uint8_t CP_CSTY_PRT = 0x01; // custom precinct values are set
46const uint8_t CP_CSTY_SOP = 0x02; // SOP markers are used
47const uint8_t CP_CSTY_EPH = 0x04; // EPH markers are used
48const uint8_t CCP_CSTY_PRECINCT = 0x01; // custom precinct values are set
49const uint8_t CCP_QNTSTY_NOQNT = 0x00; // no quantization
50const uint8_t CCP_QNTSTY_SIQNT = 0x01; // derived quantization
51const uint8_t CCP_QNTSTY_SEQNT = 0x02; // expounded quantization
52
53const uint16_t SOC = 0xff4f;
54const uint16_t SOT = 0xff90;
55const uint16_t SOD = 0xff93;
56const uint16_t EOC = 0xffd9;
57const uint16_t CAP = 0xff50;
58const uint16_t SIZ = 0xff51;
59const uint16_t COD = 0xff52;
60const uint16_t COC = 0xff53;
61const uint16_t RGN = 0xff5e;
62const uint16_t QCD = 0xff5c;
63const uint16_t QCC = 0xff5d;
64const uint16_t POC = 0xff5f;
65const uint16_t TLM = 0xff55;
66const uint16_t PLM = 0xff57;
67const uint16_t PLT = 0xff58;
68const uint16_t PPM = 0xff60;
69const uint16_t PPT = 0xff61;
70const uint16_t SOP = 0xff91;
71const uint16_t EPH = 0xff92;
72const uint16_t CRG = 0xff63;
73const uint16_t COM = 0xff64;
74const uint16_t CBD = 0xff78;
75const uint16_t MCC = 0xff75;
76const uint16_t MCT = 0xff74;
77const uint16_t MCO = 0xff77;
78const uint16_t UNK = 0;
79
80// number of bytes needed to store marker
81const uint8_t MARKER_BYTES = 2;
82
83// number of bytes needed to store length of marker (excluding marker itself)
84const uint8_t MARKER_LENGTH_BYTES = 2;
86
87class GrkImage;
88
89template<typename S, typename D>
90void write(const void* p_src_data, void* p_dest_data, uint64_t nb_elem)
91{
92 uint8_t* dest_data = (uint8_t*)p_dest_data;
93 S* src_data = (S*)p_src_data;
94 for(uint32_t i = 0; i < nb_elem; ++i)
95 {
96 D temp = (D) * (src_data++);
97 grk_write(dest_data, temp);
98 dest_data += sizeof(D);
99 }
100}
101
102const uint32_t MCT_ELEMENT_SIZE[] = {2, 4, 4, 8};
103typedef std::function<bool(void)> PROCEDURE_FUNC;
104
105class TileCache;
106
108{
109public:
110 explicit CodeStream(IStream* stream);
111 virtual ~CodeStream();
112
118 {
119 return nullptr;
120 }
121 virtual void* getBandUserData() const
122 {
123 return nullptr;
124 }
125
126protected:
127 bool exec(std::vector<PROCEDURE_FUNC>& procedureList);
129 std::vector<PROCEDURE_FUNC> procedureList_;
130 std::vector<PROCEDURE_FUNC> validationList_;
131 // stores header image information (decompress/compress)
132 // decompress: components are subsampled and resolution-reduced
135 std::unordered_map<uint32_t, ITileProcessor*> processors_;
137};
138
139} // namespace grk
#define S(buf, i)
#define D(buf, i)
CodeStream(IStream *stream)
Definition CodeStream.cpp:38
CodingParams * getCodingParams(void)
Definition CodeStream.cpp:45
grk_plugin_tile * current_plugin_tile
Definition CodeStream.h:136
std::vector< PROCEDURE_FUNC > procedureList_
Definition CodeStream.h:129
GrkImage * headerImage_
Definition CodeStream.h:133
std::vector< PROCEDURE_FUNC > validationList_
Definition CodeStream.h:130
bool exec(std::vector< PROCEDURE_FUNC > &procedureList)
Definition CodeStream.cpp:53
std::unordered_map< uint32_t, ITileProcessor * > processors_
Definition CodeStream.h:135
CodingParams cp_
Definition CodeStream.h:128
virtual grk_io_band_callback getBandCallback() const
Definition CodeStream.h:117
virtual void * getBandUserData() const
Definition CodeStream.h:121
IStream * getStream()
Definition CodeStream.cpp:65
virtual ~CodeStream()
Definition CodeStream.cpp:41
grk_plugin_tile * getCurrentPluginTile()
Definition CodeStream.cpp:61
GrkImage * getHeaderImage(void)
Definition CodeStream.cpp:49
IStream * stream_
Definition CodeStream.h:134
Stores header and data for an image.
Definition GrkImage.h:54
Caches tile processors so that repeated decompress calls on the same codec can reuse SOT metadata,...
Definition TileCache.h:108
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Environment variables.
bool(* grk_io_band_callback)(uint32_t yBegin, uint32_t yEnd, grk_image *image, void *user_data)
Callback invoked when a horizontal band of the decompressed image is ready for writing.
Definition grok.h:647
@ GRK_LRCP
unknown progression order
Definition grok.h:76
ResWindow.
Definition CompressedChunkCache.h:36
void write(const void *p_src_data, void *p_dest_data, uint64_t nb_elem)
Definition CodeStream.h:90
const uint8_t CP_CSTY_EPH
Definition CodeStream.h:47
const uint32_t MCT_ELEMENT_SIZE[]
Definition CodeStream.h:102
const uint16_t TLM
POC marker.
Definition CodeStream.h:65
const uint8_t MARKER_LENGTH_BYTES
Definition CodeStream.h:84
const uint16_t SOP
PPT marker.
Definition CodeStream.h:70
const GRK_PROG_ORDER GRK_DEFAULT_PROG_ORDER
Definition CodeStream.h:42
std::function< bool(void)> PROCEDURE_FUNC
Definition CodeStream.h:103
const uint16_t UNK
MCO marker.
Definition CodeStream.h:78
const uint32_t SPCodSPCocLen
Definition CodeStream.h:36
const uint16_t PPT
PPM marker.
Definition CodeStream.h:69
const uint32_t GRK_DEFAULT_NUMRESOLUTION
Definition CodeStream.h:43
const uint16_t PLM
TLM marker.
Definition CodeStream.h:66
const uint8_t CCP_QNTSTY_SIQNT
Definition CodeStream.h:50
const uint8_t CP_CSTY_SOP
Definition CodeStream.h:46
const uint16_t COC
COD marker.
Definition CodeStream.h:60
const uint32_t default_number_mcc_records
Definition CodeStream.h:30
const uint16_t COM
CRG marker.
Definition CodeStream.h:73
const uint8_t MARKER_BYTES_PLUS_MARKER_LENGTH_BYTES
Definition CodeStream.h:85
const uint16_t EPH
SOP marker.
Definition CodeStream.h:71
const uint16_t SIZ
CAP marker.
Definition CodeStream.h:58
const uint8_t CCP_CSTY_PRECINCT
Definition CodeStream.h:48
const uint16_t COD
SIZ marker.
Definition CodeStream.h:59
const uint16_t CRG
EPH marker.
Definition CodeStream.h:72
const uint16_t MCC
CBD marker.
Definition CodeStream.h:75
const uint32_t default_header_size
Definition CodeStream.h:29
const uint32_t sotMarkerSegmentLen
Definition CodeStream.h:34
const uint16_t PLT
PLM marker.
Definition CodeStream.h:67
const uint16_t CBD
COM marker.
Definition CodeStream.h:74
const uint16_t SOT
SOC marker.
Definition CodeStream.h:54
const uint32_t codSocLen
Definition CodeStream.h:37
const uint16_t PPM
PLT marker.
Definition CodeStream.h:68
const uint16_t CAP
EOC marker.
Definition CodeStream.h:57
const uint16_t RGN
COC marker.
Definition CodeStream.h:61
const uint32_t default_number_mct_records
Definition CodeStream.h:31
void grk_write(uint8_t *dest, const uint8_t *value, uint8_t sizeOfType, uint32_t numBytes)
Definition StreamIO.cpp:25
const uint32_t GRK_COMP_PARAM_DEFAULT_CBLOCKW
Definition CodeStream.h:40
const uint16_t SOD
SOT marker.
Definition CodeStream.h:55
const uint8_t CP_CSTY_PRT
Definition CodeStream.h:45
const uint8_t CCP_QNTSTY_NOQNT
Definition CodeStream.h:49
const uint16_t QCC
QCD marker.
Definition CodeStream.h:63
const uint32_t default_numbers_segments
Definition CodeStream.h:28
const uint16_t MCT
MCC marker.
Definition CodeStream.h:76
const uint16_t POC
QCC marker.
Definition CodeStream.h:64
const uint32_t GRK_COMP_PARAM_DEFAULT_CBLOCKH
Definition CodeStream.h:41
const uint16_t QCD
RGN marker.
Definition CodeStream.h:62
const uint16_t EOC
SOD marker.
Definition CodeStream.h:56
const uint8_t CCP_QNTSTY_SEQNT
Definition CodeStream.h:51
const uint8_t MARKER_BYTES
UNKNOWN marker.
Definition CodeStream.h:81
const uint16_t MCO
MCT marker.
Definition CodeStream.h:77
const uint32_t tlmMarkerBytesPerTilePart
Definition CodeStream.h:38
const uint16_t SOC
Definition CodeStream.h:53
Coding parameters.
Definition CodingParams.h:402
Definition IStream.h:60
Plugin tile.