Grok  10.0.3
CodeStream.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 
24 #include "CodingParams.h"
25 
26 namespace grk
27 {
28 const uint32_t default_numbers_segments = 10;
29 const uint32_t default_header_size = 4096;
30 const uint32_t default_number_mcc_records = 10;
31 const uint32_t default_number_mct_records = 10;
32 
33 // includes marker and marker length (4 bytes)
35 const uint32_t sot_marker_segment_min_len = 14U;
36 
37 const uint32_t SPCod_SPCoc_len = 5U;
38 const uint32_t cod_coc_len = 5U;
39 const uint32_t tlmMarkerBytesPerTilePart = 6;
40 
41 const uint32_t GRK_COMP_PARAM_DEFAULT_CBLOCKW = 64;
42 const uint32_t GRK_COMP_PARAM_DEFAULT_CBLOCKH = 64;
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 
54 const uint16_t J2K_MS_SOC = 0xff4f;
55 const uint16_t J2K_MS_SOT = 0xff90;
56 const uint16_t J2K_MS_SOD = 0xff93;
57 const uint16_t J2K_MS_EOC = 0xffd9;
58 const uint16_t J2K_MS_CAP = 0xff50;
59 const uint16_t J2K_MS_SIZ = 0xff51;
60 const uint16_t J2K_MS_COD = 0xff52;
61 const uint16_t J2K_MS_COC = 0xff53;
62 const uint16_t J2K_MS_RGN = 0xff5e;
63 const uint16_t J2K_MS_QCD = 0xff5c;
64 const uint16_t J2K_MS_QCC = 0xff5d;
65 const uint16_t J2K_MS_POC = 0xff5f;
66 const uint16_t J2K_MS_TLM = 0xff55;
67 const uint16_t J2K_MS_PLM = 0xff57;
68 const uint16_t J2K_MS_PLT = 0xff58;
69 const uint16_t J2K_MS_PPM = 0xff60;
70 const uint16_t J2K_MS_PPT = 0xff61;
71 const uint16_t J2K_MS_SOP = 0xff91;
72 const uint16_t J2K_MS_EPH = 0xff92;
73 const uint16_t J2K_MS_CRG = 0xff63;
74 const uint16_t J2K_MS_COM = 0xff64;
75 const uint16_t J2K_MS_CBD = 0xff78;
76 const uint16_t J2K_MS_MCC = 0xff75;
77 const uint16_t J2K_MS_MCT = 0xff74;
78 const uint16_t J2K_MS_MCO = 0xff77;
79 const uint16_t J2K_MS_UNK = 0;
81 // number of bytes needed to store marker
82 const uint8_t MARKER_BYTES = 2;
83 // number of bytes neede to store length of marker (excluding marker itself)
84 const uint8_t MARKER_LENGTH_BYTES = 2;
86 
87 class GrkImage;
88 
89 template<typename S, typename D>
90 void j2k_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<D>(dest_data, temp, sizeof(D));
98  dest_data += sizeof(D);
99  }
100 }
101 
102 const uint32_t MCT_ELEMENT_SIZE[] = {2, 4, 4, 8};
103 typedef void (*j2k_mct_function)(const void* p_src_data, void* p_dest_data, uint64_t nb_elem);
104 typedef std::function<bool(void)> PROCEDURE_FUNC;
105 
107 {
108  virtual ~ICodeStreamCompress() = default;
109  virtual bool init(grk_cparameters* p_param, GrkImage* p_image) = 0;
110  virtual bool start(void) = 0;
111  virtual bool compress(grk_plugin_tile* tile) = 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;
121  virtual void init(grk_decompress_core_params* p_param) = 0;
122  virtual bool setDecompressRegion(grk_rect_single region) = 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;
127  virtual void dump(uint32_t flag, FILE* outputFileStream) = 0;
128 };
129 
130 class TileCache;
131 
133 {
134  public:
135  CodeStream(IBufferedStream* stream);
136  virtual ~CodeStream();
137 
140  GrkImage* getHeaderImage(void);
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
GrkImage * headerImage_
Definition: CodeStream.h:153
std::vector< PROCEDURE_FUNC > validation_list_
Definition: CodeStream.h:150
CodeStream(IBufferedStream *stream)
Definition: CodeStream.cpp:25
CodingParams cp_
Definition: CodeStream.h:147
IBufferedStream * getStream()
Definition: CodeStream.cpp:59
bool exec(std::vector< PROCEDURE_FUNC > &p_procedure_list)
Definition: CodeStream.cpp:47
TileProcessor * currentTileProcessor_
Definition: CodeStream.h:154
IBufferedStream * stream_
Definition: CodeStream.h:155
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
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
Definition: GrkImage.h:25
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-2022 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
std::function< bool(void)> PROCEDURE_FUNC
Definition: CodeStream.h:104
const uint16_t J2K_MS_SIZ
SIZ marker value.
Definition: CodeStream.h:59
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 GRK_PROG_ORDER GRK_COMP_PARAM_DEFAULT_PROG_ORDER
Definition: CodeStream.h:43
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 GRK_COMP_PARAM_DEFAULT_NUMRESOLUTION
Definition: CodeStream.h:44
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:912
Core decompression parameters.
Definition: grok.h:480
Header info.
Definition: grok.h:361
Plugin tile.
Definition: grok.h:739
Definition: LengthCache.h:70
Coding parameters.
Definition: CodingParams.h:245
Definition: IBufferedStream.h:20
Definition: CodeStream.h:107
virtual bool start(void)=0
virtual bool init(grk_cparameters *p_param, GrkImage *p_image)=0
virtual bool compress(grk_plugin_tile *tile)=0
virtual ~ICodeStreamCompress()=default
Definition: CodeStream.h:115
virtual bool postProcess(void)=0
virtual GrkImage * getImage(void)=0
virtual bool preProcess(void)=0
virtual bool readHeader(grk_header_info *header_info)=0
virtual GrkImage * getImage(uint16_t tileIndex)=0
virtual bool decompressTile(uint16_t tileIndex)=0
virtual ~ICodeStreamDecompress()=default
virtual bool decompress(grk_plugin_tile *tile)=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