Grok 12.0.1
CodeStream.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
24#include "CodingParams.h"
25
26namespace grk
27{
32
33// includes marker and marker length (4 bytes)
36
40
45
46#define J2K_CP_CSTY_PRT 0x01
47#define J2K_CP_CSTY_SOP 0x02
48#define J2K_CP_CSTY_EPH 0x04
49#define J2K_CCP_CSTY_PRT 0x01
50#define J2K_CCP_QNTSTY_NOQNT 0 // no quantization
51#define J2K_CCP_QNTSTY_SIQNT 1 // derived quantization
52#define J2K_CCP_QNTSTY_SEQNT 2 // expounded quantization
53
54const uint16_t J2K_MS_SOC = 0xff4f;
55const uint16_t J2K_MS_SOT = 0xff90;
56const uint16_t J2K_MS_SOD = 0xff93;
57const uint16_t J2K_MS_EOC = 0xffd9;
58const uint16_t J2K_MS_CAP = 0xff50;
59const uint16_t J2K_MS_SIZ = 0xff51;
60const uint16_t J2K_MS_COD = 0xff52;
61const uint16_t J2K_MS_COC = 0xff53;
62const uint16_t J2K_MS_RGN = 0xff5e;
63const uint16_t J2K_MS_QCD = 0xff5c;
64const uint16_t J2K_MS_QCC = 0xff5d;
65const uint16_t J2K_MS_POC = 0xff5f;
66const uint16_t J2K_MS_TLM = 0xff55;
67const uint16_t J2K_MS_PLM = 0xff57;
68const uint16_t J2K_MS_PLT = 0xff58;
69const uint16_t J2K_MS_PPM = 0xff60;
70const uint16_t J2K_MS_PPT = 0xff61;
71const uint16_t J2K_MS_SOP = 0xff91;
72const uint16_t J2K_MS_EPH = 0xff92;
73const uint16_t J2K_MS_CRG = 0xff63;
74const uint16_t J2K_MS_COM = 0xff64;
75const uint16_t J2K_MS_CBD = 0xff78;
76const uint16_t J2K_MS_MCC = 0xff75;
77const uint16_t J2K_MS_MCT = 0xff74;
78const uint16_t J2K_MS_MCO = 0xff77;
81// number of bytes needed to store marker
83// number of bytes neede to store length of marker (excluding marker itself)
86
87class GrkImage;
88
89template<typename S, typename D>
91{
94 for(uint32_t i = 0; i < nb_elem; ++i)
95 {
96 D temp = (D) * (src_data++);
97 grk_write<D>(dest_data, temp, sizeof(D));
98 dest_data += sizeof(D);
99 }
100}
101
102const uint32_t MCT_ELEMENT_SIZE[] = {2, 4, 4, 8};
104typedef std::function<bool(void)> PROCEDURE_FUNC;
105
107{
108 virtual ~ICodeStreamCompress() = default;
110 virtual bool start(void) = 0;
112};
113
115{
116 public:
117 virtual ~ICodeStreamDecompress() = default;
118 virtual bool readHeader(grk_header_info* header_info) = 0;
119 virtual GrkImage* getImage(uint16_t tileIndex) = 0;
120 virtual GrkImage* getImage(void) = 0;
123 virtual bool decompress(grk_plugin_tile* tile) = 0;
124 virtual bool decompressTile(uint16_t tileIndex) = 0;
125 virtual bool preProcess(void) = 0;
126 virtual bool postProcess(void) = 0;
128};
129
130class TileCache;
131
133{
134 public:
135 CodeStream(BufferedStream* stream);
136 virtual ~CodeStream();
137
143 static std::string markerString(uint16_t marker);
144
145 protected:
146 bool exec(std::vector<PROCEDURE_FUNC>& p_procedure_list);
149 std::vector<PROCEDURE_FUNC> procedure_list_;
150 std::vector<PROCEDURE_FUNC> validation_list_;
151 // stores header image information (decompress/compress)
152 // decompress: components are subsampled and resolution-reduced
156 std::map<uint32_t, TileProcessor*> processors_;
158};
159
162/* ----------------------------------------------------------------------- */
163
164/* ----------------------------------------------------------------------- */
168
169} // namespace grk
Definition CodeStream.h:133
CodingParams * getCodingParams(void)
Definition CodeStream.cpp:35
CodeStreamInfo * codeStreamInfo
Definition CodeStream.h:148
grk_plugin_tile * current_plugin_tile
Definition CodeStream.h:157
BufferedStream * getStream()
Definition CodeStream.cpp:59
GrkImage * headerImage_
Definition CodeStream.h:153
std::vector< PROCEDURE_FUNC > validation_list_
Definition CodeStream.h:150
CodingParams cp_
Definition CodeStream.h:147
bool exec(std::vector< PROCEDURE_FUNC > &p_procedure_list)
Definition CodeStream.cpp:47
TileProcessor * currentTileProcessor_
Definition CodeStream.h:154
virtual ~CodeStream()
Definition CodeStream.cpp:29
grk_plugin_tile * getCurrentPluginTile()
Definition CodeStream.cpp:55
static std::string markerString(uint16_t marker)
Definition CodeStream.cpp:64
CodeStream(BufferedStream *stream)
Definition CodeStream.cpp:25
TileProcessor * currentProcessor(void)
Definition CodeStream.cpp:43
std::vector< PROCEDURE_FUNC > procedure_list_
Definition CodeStream.h:149
std::map< uint32_t, TileProcessor * > processors_
Definition CodeStream.h:156
GrkImage * getHeaderImage(void)
Definition CodeStream.cpp:39
BufferedStream * stream_
Definition CodeStream.h:155
Definition GrkImage.h:24
Definition TileCache.h:38
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Progression order.
@ GRK_LRCP
layer-resolution-component-precinct order
Definition grok.h:59
Copyright (C) 2016-2024 Grok Image Compression Inc.
Definition ICacheable.h:20
void(* j2k_mct_function)(const void *p_src_data, void *p_dest_data, uint64_t nb_elem)
Definition CodeStream.h:103
const uint16_t J2K_MS_MCC
MCC marker value.
Definition CodeStream.h:76
const uint16_t J2K_MS_PPM
PPM marker value.
Definition CodeStream.h:69
const uint32_t MCT_ELEMENT_SIZE[]
Definition CodeStream.h:102
const uint16_t J2K_MS_MCO
MCO marker value.
Definition CodeStream.h:78
const uint8_t MARKER_LENGTH_BYTES
Definition CodeStream.h:84
void grk_read(const uint8_t *buffer, TYPE *value, uint32_t numBytes)
Definition BufferedStream.h:239
const GRK_PROG_ORDER GRK_DEFAULT_PROG_ORDER
Definition CodeStream.h:43
std::function< bool(void)> PROCEDURE_FUNC
Definition CodeStream.h:104
const uint16_t J2K_MS_SIZ
SIZ marker value.
Definition CodeStream.h:59
const uint32_t GRK_DEFAULT_NUMRESOLUTION
Definition CodeStream.h:44
const uint16_t J2K_MS_SOC
SOC marker value.
Definition CodeStream.h:54
const uint32_t default_number_mcc_records
Definition CodeStream.h:30
const uint8_t MARKER_PLUS_MARKER_LENGTH_BYTES
Definition CodeStream.h:85
const uint32_t default_header_size
Definition CodeStream.h:29
const uint16_t J2K_MS_MCT
MCT marker value.
Definition CodeStream.h:77
const uint32_t SPCod_SPCoc_len
Definition CodeStream.h:37
const uint16_t J2K_MS_QCC
QCC marker value.
Definition CodeStream.h:64
const uint16_t J2K_MS_POC
POC marker value.
Definition CodeStream.h:65
const uint16_t J2K_MS_COM
COM marker value.
Definition CodeStream.h:74
const uint16_t J2K_MS_EOC
EOC marker value.
Definition CodeStream.h:57
const uint16_t J2K_MS_COC
COC marker value.
Definition CodeStream.h:61
const uint32_t default_number_mct_records
Definition CodeStream.h:31
const uint16_t J2K_MS_CRG
CRG marker value.
Definition CodeStream.h:73
void j2k_write(const void *p_src_data, void *p_dest_data, uint64_t nb_elem)
Definition CodeStream.h:90
const uint32_t GRK_COMP_PARAM_DEFAULT_CBLOCKW
Definition CodeStream.h:41
const uint16_t J2K_MS_PLT
PLT marker value.
Definition CodeStream.h:68
const uint16_t J2K_MS_CBD
CBD marker value.
Definition CodeStream.h:75
const uint16_t J2K_MS_QCD
QCD marker value.
Definition CodeStream.h:63
const uint16_t J2K_MS_RGN
RGN marker value.
Definition CodeStream.h:62
const uint32_t sot_marker_segment_len_minus_tile_data_len
Definition CodeStream.h:34
const uint32_t default_numbers_segments
Definition CodeStream.h:28
const uint16_t J2K_MS_UNK
UNKNOWN marker value.
Definition CodeStream.h:79
const uint32_t cod_coc_len
Definition CodeStream.h:38
const uint16_t J2K_MS_CAP
CAP marker value.
Definition CodeStream.h:58
const uint16_t J2K_MS_COD
COD marker value.
Definition CodeStream.h:60
const uint16_t J2K_MS_SOP
SOP marker value.
Definition CodeStream.h:71
const uint32_t GRK_COMP_PARAM_DEFAULT_CBLOCKH
Definition CodeStream.h:42
const uint8_t MARKER_BYTES
Definition CodeStream.h:82
const uint16_t J2K_MS_EPH
EPH marker value.
Definition CodeStream.h:72
const uint16_t J2K_MS_TLM
TLM marker value.
Definition CodeStream.h:66
const uint32_t tlmMarkerBytesPerTilePart
Definition CodeStream.h:39
const uint32_t sot_marker_segment_min_len
Definition CodeStream.h:35
const uint16_t J2K_MS_SOD
SOD marker value.
Definition CodeStream.h:56
const uint16_t J2K_MS_PLM
PLM marker value.
Definition CodeStream.h:67
const uint16_t J2K_MS_SOT
SOT marker value.
Definition CodeStream.h:55
const uint16_t J2K_MS_PPT
PPT marker value.
Definition CodeStream.h:70
Compress parameters.
Definition grok.h:976
Core decompression parameters.
Definition grok.h:558
Header info.
Definition grok.h:388
Plugin tile.
Definition grok.h:808
Definition BufferedStream.h:35
Definition LengthCache.h:70
Coding parameters.
Definition CodingParams.h:245
Definition CodeStream.h:107
virtual uint64_t compress(grk_plugin_tile *tile)=0
virtual bool start(void)=0
virtual bool init(grk_cparameters *p_param, GrkImage *p_image)=0
virtual ~ICodeStreamCompress()=default
Definition CodeStream.h:115
virtual bool postProcess(void)=0
virtual GrkImage * getImage(uint16_t tileIndex)=0
virtual bool preProcess(void)=0
virtual bool readHeader(grk_header_info *header_info)=0
virtual bool decompressTile(uint16_t tileIndex)=0
virtual ~ICodeStreamDecompress()=default
virtual bool decompress(grk_plugin_tile *tile)=0
virtual GrkImage * getImage(void)=0
virtual bool setDecompressRegion(grk_rect_single region)=0
virtual void init(grk_decompress_core_params *p_param)=0
virtual void dump(uint32_t flag, FILE *outputFileStream)=0
Definition TileProcessor.h:78
Definition geometry.h:102