Grok  9.5.0
CodeStream.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 
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)
34 const uint32_t sot_marker_segment_len = 12U;
35 const uint32_t grk_marker_length = 4U;
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 #define J2K_MS_SOC 0xff4f
55 #define J2K_MS_SOT 0xff90
56 #define J2K_MS_SOD 0xff93
57 #define J2K_MS_EOC 0xffd9
58 #define J2K_MS_CAP 0xff50
59 #define J2K_MS_SIZ 0xff51
60 #define J2K_MS_COD 0xff52
61 #define J2K_MS_COC 0xff53
62 #define J2K_MS_RGN 0xff5e
63 #define J2K_MS_QCD 0xff5c
64 #define J2K_MS_QCC 0xff5d
65 #define J2K_MS_POC 0xff5f
66 #define J2K_MS_TLM 0xff55
67 #define J2K_MS_PLM 0xff57
68 #define J2K_MS_PLT 0xff58
69 #define J2K_MS_PPM 0xff60
70 #define J2K_MS_PPT 0xff61
71 #define J2K_MS_SOP 0xff91
72 #define J2K_MS_EPH 0xff92
73 #define J2K_MS_CRG 0xff63
74 #define J2K_MS_COM 0xff64
75 #define J2K_MS_CBD 0xff78
76 #define J2K_MS_MCC 0xff75
77 #define J2K_MS_MCT 0xff74
78 #define J2K_MS_MCO 0xff77
79 #define J2K_MS_UNK 0
81 class GrkImage;
82 
83 template<typename S, typename D>
84 void j2k_write(const void* p_src_data, void* p_dest_data, uint64_t nb_elem)
85 {
86  uint8_t* dest_data = (uint8_t*)p_dest_data;
87  S* src_data = (S*)p_src_data;
88  for(uint32_t i = 0; i < nb_elem; ++i)
89  {
90  D temp = (D) * (src_data++);
91  grk_write<D>(dest_data, temp, sizeof(D));
92  dest_data += sizeof(D);
93  }
94 }
95 
96 const uint32_t MCT_ELEMENT_SIZE[] = {2, 4, 4, 8};
97 typedef void (*j2k_mct_function)(const void* p_src_data, void* p_dest_data, uint64_t nb_elem);
98 typedef std::function<bool(void)> PROCEDURE_FUNC;
99 
101 {
102  virtual ~ICodeStreamCompress() = default;
103  virtual bool initCompress(grk_cparameters* p_param, GrkImage* p_image) = 0;
104  virtual bool startCompress(void) = 0;
105  virtual bool compress(grk_plugin_tile* tile) = 0;
106  virtual bool compressTile(uint16_t tileIndex, uint8_t* p_data, uint64_t data_size) = 0;
107  virtual bool endCompress(void) = 0;
108 };
109 
111 {
112  public:
113  virtual ~ICodeStreamDecompress() = default;
114  virtual bool readHeader(grk_header_info* header_info) = 0;
115  virtual GrkImage* getImage(uint16_t tileIndex) = 0;
116  virtual GrkImage* getImage(void) = 0;
117  virtual void initDecompress(grk_dparameters* p_param) = 0;
118  virtual bool setDecompressWindow(grkRectU32 window) = 0;
119  virtual bool decompress(grk_plugin_tile* tile) = 0;
120  virtual bool decompressTile(uint16_t tileIndex) = 0;
121  virtual bool endDecompress(void) = 0;
122  virtual void dump(uint32_t flag, FILE* outputFileStream) = 0;
123 };
124 
125 class TileCache;
126 
128 {
129  public:
130  CodeStream(IBufferedStream* stream);
131  virtual ~CodeStream();
132 
135  GrkImage* getHeaderImage(void);
138 
139  protected:
140  bool exec(std::vector<PROCEDURE_FUNC>& p_procedure_list);
143  std::vector<PROCEDURE_FUNC> m_procedure_list;
144  std::vector<PROCEDURE_FUNC> m_validation_list;
145  // stores header image information (decompress/compress)
146  // decompress: components are subsampled and resolution-reduced
150  std::map<uint32_t, TileProcessor*> m_processors;
153 };
154 
157 /* ----------------------------------------------------------------------- */
158 
159 /* ----------------------------------------------------------------------- */
163 
164 } // namespace grk
Definition: CodeStream.h:128
CodingParams * getCodingParams(void)
Definition: CodeStream.cpp:35
CodeStreamInfo * codeStreamInfo
Definition: CodeStream.h:142
grk_plugin_tile * current_plugin_tile
Definition: CodeStream.h:152
std::map< uint32_t, TileProcessor * > m_processors
Definition: CodeStream.h:150
CodeStream(IBufferedStream *stream)
Definition: CodeStream.cpp:25
CodingParams m_cp
Definition: CodeStream.h:141
TileProcessor * m_currentTileProcessor
Definition: CodeStream.h:148
IBufferedStream * getStream()
Definition: CodeStream.cpp:59
bool exec(std::vector< PROCEDURE_FUNC > &p_procedure_list)
Definition: CodeStream.cpp:47
IBufferedStream * m_stream
Definition: CodeStream.h:149
bool m_multiTile
Definition: CodeStream.h:151
std::vector< PROCEDURE_FUNC > m_validation_list
Definition: CodeStream.h:144
std::vector< PROCEDURE_FUNC > m_procedure_list
Definition: CodeStream.h:143
virtual ~CodeStream()
Definition: CodeStream.cpp:29
grk_plugin_tile * getCurrentPluginTile()
Definition: CodeStream.cpp:55
TileProcessor * currentProcessor(void)
Definition: CodeStream.cpp:43
GrkImage * getHeaderImage(void)
Definition: CodeStream.cpp:39
GrkImage * m_headerImage
Definition: CodeStream.h:147
Definition: GrkImage.h:19
Definition: TileCache.h:38
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Progression order.
@ GRK_LRCP
layer-resolution-component-precinct order
Definition: grok.h:309
Copyright (C) 2016-2021 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:97
const uint32_t MCT_ELEMENT_SIZE[]
Definition: CodeStream.h:96
std::function< bool(void)> PROCEDURE_FUNC
Definition: CodeStream.h:98
const uint32_t default_number_mcc_records
Definition: CodeStream.h:30
const uint32_t default_header_size
Definition: CodeStream.h:29
const uint32_t SPCod_SPCoc_len
Definition: CodeStream.h:37
const GRK_PROG_ORDER GRK_COMP_PARAM_DEFAULT_PROG_ORDER
Definition: CodeStream.h:43
const uint32_t default_number_mct_records
Definition: CodeStream.h:31
void j2k_write(const void *p_src_data, void *p_dest_data, uint64_t nb_elem)
Definition: CodeStream.h:84
const uint32_t GRK_COMP_PARAM_DEFAULT_CBLOCKW
Definition: CodeStream.h:41
const uint32_t grk_marker_length
Definition: CodeStream.h:35
const uint32_t sot_marker_segment_len
Definition: CodeStream.h:34
const uint32_t default_numbers_segments
Definition: CodeStream.h:28
const uint32_t GRK_COMP_PARAM_DEFAULT_NUMRESOLUTION
Definition: CodeStream.h:44
const uint32_t cod_coc_len
Definition: CodeStream.h:38
const uint32_t GRK_COMP_PARAM_DEFAULT_CBLOCKH
Definition: CodeStream.h:42
const uint32_t tlmMarkerBytesPerTilePart
Definition: CodeStream.h:39
Compress parameters.
Definition: grok.h:489
Core decompress parameters.
Definition: grok.h:740
Header info.
Definition: grok.h:681
Plugin tile.
Definition: grok.h:1096
Definition: LengthCache.h:76
Coding parameters.
Definition: CodingParams.h:242
Definition: IBufferedStream.h:20
Definition: CodeStream.h:101
virtual bool endCompress(void)=0
virtual bool compressTile(uint16_t tileIndex, uint8_t *p_data, uint64_t data_size)=0
virtual bool startCompress(void)=0
virtual bool compress(grk_plugin_tile *tile)=0
virtual bool initCompress(grk_cparameters *p_param, GrkImage *p_image)=0
virtual ~ICodeStreamCompress()=default
Definition: CodeStream.h:111
virtual bool setDecompressWindow(grkRectU32 window)=0
virtual void initDecompress(grk_dparameters *p_param)=0
virtual GrkImage * getImage(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 void dump(uint32_t flag, FILE *outputFileStream)=0
virtual bool endDecompress(void)=0
Tile processor for decompression and compression.
Definition: TileProcessor.h:77