Grok 10.0.0
CodeStreamDecompress.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
24namespace grk
25{
26typedef std::function<bool(uint8_t* headerData, uint16_t header_size)> MARKER_FUNC;
28{
29 marker_handler(uint16_t ID, uint32_t flags, MARKER_FUNC f) : id(ID), states(flags), func(f) {}
31 uint16_t id;
33 uint32_t states;
35};
36
38{
39 public:
41 virtual ~CodeStreamDecompress();
42 TileProcessor* allocateProcessor(uint16_t tileIndex);
46 bool readHeader(grk_header_info* header_info);
47 GrkImage* getImage(uint16_t tileIndex);
48 GrkImage* getImage(void);
49 std::vector<GrkImage*> getAllImages(void);
50 void init(grk_decompress_core_params* p_param);
52 bool decompress(grk_plugin_tile* tile);
53 bool decompressTile(uint16_t tileIndex);
54 bool preProcess(void);
55 bool postProcess(void);
58 bool readMarker(void);
59 bool readMarker(bool suppressWarning);
61 uint16_t getCurrentMarker(void);
62 void dump(uint32_t flag, FILE* outputFileStream);
63 bool needsHeaderRead(void);
64 void setExpectSOD();
65
66 protected:
67 void dump_MH_info(FILE* outputFileStream);
76 void dump_image_header(GrkImage* image, bool dev_dump_flag, FILE* outputFileStream);
77 void dump_tile_info(TileCodingParams* default_tile, uint32_t numcomps, FILE* outputFileStream);
86 void dump_image_comp_header(grk_image_comp* comp, bool dev_dump_flag, FILE* outputFileStream);
87
88 private:
89 bool readCurrentMarkerBody(uint16_t* markerSize);
90 bool endOfCodeStream(void);
91 bool read_short(uint16_t* val);
92 bool process_marker(const marker_handler* marker_handler, uint16_t marker_size);
93 bool readSOTorEOC(void);
94 bool parseTileParts(bool* can_decode_tile_data);
95 bool readHeaderProcedureImpl(void);
96 bool decompressExec();
97 bool decompressTile();
98 bool findNextSOT(TileProcessor* tileProcessor);
100 bool hasTLM(void);
101 void nextTLM(void);
102 bool decompressTiles(void);
103 bool decompressValidation(void);
104 bool copy_default_tcp(void);
105 bool read_unk(void);
112 void addMarker(uint16_t id, uint64_t pos, uint32_t len);
120 bool read_mct(uint8_t* headerData, uint16_t header_size);
128 bool read_mcc(uint8_t* headerData, uint16_t header_size);
136 bool read_mco(uint8_t* headerData, uint16_t header_size);
137 bool add_mct(TileCodingParams* p_tcp, GrkImage* p_image, uint32_t index);
145 bool read_cbd(uint8_t* headerData, uint16_t header_size);
152 bool read_rgn(uint8_t* headerData, uint16_t header_size);
153
154 bool readHeaderProcedure(void);
158 bool read_soc();
165 bool read_siz(uint8_t* headerData, uint16_t header_size);
172 bool read_cap(uint8_t* headerData, uint16_t header_size);
180 bool read_com(uint8_t* headerData, uint16_t header_size);
188 bool read_cod(uint8_t* headerData, uint16_t header_size);
195 bool read_poc(uint8_t* headerData, uint16_t header_size);
203 bool read_crg(uint8_t* headerData, uint16_t header_size);
210 bool read_tlm(uint8_t* headerData, uint16_t header_size);
218 bool read_plm(uint8_t* headerData, uint16_t header_size);
226 bool read_plt(uint8_t* headerData, uint16_t header_size);
234 bool read_ppm(uint8_t* headerData, uint16_t header_size);
242 bool read_ppt(uint8_t* headerData, uint16_t header_size);
250 bool read_sot(uint8_t* headerData, uint16_t header_size);
258 bool read_SPCod_SPCoc(uint16_t compno, uint8_t* headerData, uint16_t* header_size);
270 bool read_SQcd_SQcc(bool fromQCC, uint16_t compno, uint8_t* headerData, uint16_t* header_size);
277 bool merge_ppm(CodingParams* p_cp);
284 bool merge_ppt(TileCodingParams* p_tcp);
292 bool read_coc(uint8_t* headerData, uint16_t header_size);
299 bool read_qcd(uint8_t* headerData, uint16_t header_size);
307 bool read_qcc(uint8_t* headerData, uint16_t header_size);
315 const marker_handler* get_marker_handler(uint16_t id);
316
317 bool createOutputImage(void);
318 bool checkForIllegalTilePart(void);
319
320 std::map<uint16_t, marker_handler*> marker_map;
323 uint16_t curr_marker_;
334};
335
336} // namespace grk
Definition: CodeStreamDecompress.h:38
CodeStreamInfo * getCodeStreamInfo(void)
Definition: CodeStreamDecompress.cpp:141
void addMarker(uint16_t id, uint64_t pos, uint32_t len)
Add main header marker information.
Definition: CodeStreamDecompress.cpp:651
std::map< uint16_t, marker_handler * > marker_map
Definition: CodeStreamDecompress.h:320
void dump_image_header(GrkImage *image, bool dev_dump_flag, FILE *outputFileStream)
Dump an image header structure.
Definition: CodeStreamDecompress.cpp:1163
bool decompressTiles(void)
Definition: CodeStreamDecompress.cpp:454
bool isDecodingTilePartHeader()
Definition: CodeStreamDecompress.cpp:145
bool findNextSOT(TileProcessor *tileProcessor)
Definition: CodeStreamDecompress.cpp:929
GrkImage * outputImage_
Definition: CodeStreamDecompress.h:328
bool headerRead_
Definition: CodeStreamDecompress.h:325
void dump_MH_info(FILE *outputFileStream)
Definition: CodeStreamDecompress.cpp:1153
bool read_plm(uint8_t *headerData, uint16_t header_size)
Reads a PLM marker (Packet length, main header marker)
Definition: CodeStreamDecompress_Markers.cpp:538
bool needsHeaderRead(void)
Definition: CodeStreamDecompress.cpp:111
bool merge_ppm(CodingParams *p_cp)
Merges all PPM markers read (Packed headers, main header)
Definition: CodeStreamDecompress_Markers.cpp:587
void init(grk_decompress_core_params *p_param)
Definition: CodeStreamDecompress.cpp:353
bool createOutputImage(void)
Definition: CodeStreamDecompress.cpp:797
GrkImage * getImage(void)
Definition: CodeStreamDecompress.cpp:162
bool read_soc()
Reads a SOC marker (Start of Codestream)
Definition: CodeStreamDecompress_Markers.cpp:1932
bool process_marker(const marker_handler *marker_handler, uint16_t marker_size)
Definition: CodeStreamDecompress.cpp:958
void dump(uint32_t flag, FILE *outputFileStream)
Definition: CodeStreamDecompress.cpp:1112
bool decompress(grk_plugin_tile *tile)
Definition: CodeStreamDecompress.cpp:366
bool read_rgn(uint8_t *headerData, uint16_t header_size)
Reads a RGN marker (Region Of Interest)
Definition: CodeStreamDecompress_Markers.cpp:750
bool read_mco(uint8_t *headerData, uint16_t header_size)
Reads a MCO marker (Multiple Component Transform Ordering)
Definition: CodeStreamDecompress_Markers.cpp:800
StripCache stripCache_
Definition: CodeStreamDecompress.h:330
void * ioUserData
Definition: CodeStreamDecompress.h:332
bool read_ppm(uint8_t *headerData, uint16_t header_size)
Reads a PPM marker (Packed headers, main header)
Definition: CodeStreamDecompress_Markers.cpp:573
bool expectSOD_
Definition: CodeStreamDecompress.h:322
bool read_cap(uint8_t *headerData, uint16_t header_size)
Reads a CAP marker.
Definition: CodeStreamDecompress_Markers.cpp:1961
bool readHeaderProcedure(void)
Definition: CodeStreamDecompress.cpp:664
bool read_mcc(uint8_t *headerData, uint16_t header_size)
Reads a MCC marker (Multiple Component Collection)
Definition: CodeStreamDecompress_Markers.cpp:1267
bool skipNonScheduledTLM(CodingParams *cp)
Definition: CodeStreamDecompress.cpp:820
void dump_image_comp_header(grk_image_comp *comp, bool dev_dump_flag, FILE *outputFileStream)
Dump a component image header structure.
Definition: CodeStreamDecompress.cpp:1194
bool read_crg(uint8_t *headerData, uint16_t header_size)
Reads a CRG marker (Component registration)
Definition: CodeStreamDecompress_Markers.cpp:510
bool read_cod(uint8_t *headerData, uint16_t header_size)
Reads a COD marker (Coding Style defaults)
Definition: CodeStreamDecompress_Markers.cpp:1683
bool read_com(uint8_t *headerData, uint16_t header_size)
Reads a COM marker (comments)
Definition: CodeStreamDecompress_Markers.cpp:2024
bool read_SPCod_SPCoc(uint16_t compno, uint8_t *headerData, uint16_t *header_size)
Reads a SPCod or SPCoc element, i.e.
Definition: CodeStreamDecompress_Markers.cpp:1127
bool setDecompressRegion(grk_rect_single region)
Definition: CodeStreamDecompress.cpp:244
bool read_qcd(uint8_t *headerData, uint16_t header_size)
Reads a QCD marker (Quantization defaults)
Definition: CodeStreamDecompress_Markers.cpp:1839
void dump_tile_info(TileCodingParams *default_tile, uint32_t numcomps, FILE *outputFileStream)
Definition: CodeStreamDecompress.cpp:1053
std::vector< GrkImage * > getAllImages(void)
Definition: CodeStreamDecompress.cpp:158
bool read_cbd(uint8_t *headerData, uint16_t header_size)
Reads a CBD marker (Component bit depth definition)
Definition: CodeStreamDecompress_Markers.cpp:926
void setExpectSOD()
Definition: CodeStreamDecompress.cpp:115
DecompressorState decompressorState_
Definition: CodeStreamDecompress.h:321
uint16_t curr_marker_
Definition: CodeStreamDecompress.h:323
bool read_plt(uint8_t *headerData, uint16_t header_size)
Reads a PLT marker (Packet length, tile-part header)
Definition: CodeStreamDecompress_Markers.cpp:553
CodeStreamDecompress(IBufferedStream *stream)
Definition: CodeStreamDecompress.cpp:26
uint8_t * marker_scratch_
Definition: CodeStreamDecompress.h:326
bool decompressTile()
Definition: CodeStreamDecompress.cpp:833
DecompressorState * getDecompressorState(void)
Definition: CodeStreamDecompress.cpp:149
bool read_short(uint16_t *val)
Definition: CodeStreamDecompress.cpp:985
uint16_t getCurrentMarker(void)
Definition: CodeStreamDecompress.cpp:656
TileProcessor * allocateProcessor(uint16_t tileIndex)
Definition: CodeStreamDecompress.cpp:123
bool copy_default_tcp(void)
Definition: CodeStreamDecompress.cpp:640
bool readHeaderProcedureImpl(void)
Definition: CodeStreamDecompress.cpp:678
bool read_qcc(uint8_t *headerData, uint16_t header_size)
Reads a QCC marker (Quantization component)
Definition: CodeStreamDecompress_Markers.cpp:1881
bool postProcess(void)
Definition: CodeStreamDecompress.cpp:1034
bool readMarker(void)
Definition: CodeStreamDecompress.cpp:1006
bool read_ppt(uint8_t *headerData, uint16_t header_size)
Reads a PPT marker (Packed packet headers, tile-part header)
Definition: CodeStreamDecompress_Markers.cpp:598
bool hasTLM(void)
Definition: CodeStreamDecompress.cpp:813
bool add_mct(TileCodingParams *p_tcp, GrkImage *p_image, uint32_t index)
Definition: CodeStreamDecompress_Markers.cpp:847
grk_io_register_reclaim_callback grkRegisterReclaimCallback_
Definition: CodeStreamDecompress.h:333
TileCodingParams * get_current_decode_tcp(void)
Definition: CodeStreamDecompress.cpp:136
bool parseTileParts(bool *can_decode_tile_data)
Definition: CodeStreamDecompress_Markers.cpp:124
bool merge_ppt(TileCodingParams *p_tcp)
Merges all PPT markers read (Packed headers, tile-part header)
Definition: CodeStreamDecompress_Markers.cpp:681
bool read_siz(uint8_t *headerData, uint16_t header_size)
Reads a SIZ marker (image and tile size)
Definition: CodeStreamDecompress_Markers.cpp:2004
TileCache * tileCache_
Definition: CodeStreamDecompress.h:329
GrkImage * getCompositeImage()
Definition: CodeStreamDecompress.cpp:119
bool preProcess(void)
Definition: CodeStreamDecompress.cpp:1030
const marker_handler * get_marker_handler(uint16_t id)
Reads the lookup table containing all the marker, status and action, and returns the handler associat...
Definition: CodeStreamDecompress.cpp:995
bool read_SQcd_SQcc(bool fromQCC, uint16_t compno, uint8_t *headerData, uint16_t *header_size)
Reads a SQcd or SQcc element, i.e.
Definition: CodeStreamDecompress_Markers.cpp:977
bool decompressExec()
Definition: CodeStreamDecompress.cpp:786
bool read_coc(uint8_t *headerData, uint16_t header_size)
Reads a COC marker (Coding Style Component)
Definition: CodeStreamDecompress_Markers.cpp:1793
virtual ~CodeStreamDecompress()
Definition: CodeStreamDecompress.cpp:101
bool read_tlm(uint8_t *headerData, uint16_t header_size)
Reads a TLM marker (Tile Length Marker)
Definition: CodeStreamDecompress_Markers.cpp:965
bool decompressValidation(void)
Definition: CodeStreamDecompress.cpp:951
bool endOfCodeStream(void)
Definition: CodeStreamDecompress.cpp:449
bool readCurrentMarkerBody(uint16_t *markerSize)
Definition: CodeStreamDecompress_Markers.cpp:80
void nextTLM(void)
Definition: CodeStreamDecompress_Markers.cpp:375
bool read_sot(uint8_t *headerData, uint16_t header_size)
Read SOT (Start of tile part) marker.
Definition: CodeStreamDecompress_Markers.cpp:737
bool read_poc(uint8_t *headerData, uint16_t header_size)
Reads a POC marker (Progression Order Change)
Definition: CodeStreamDecompress_Markers.cpp:415
bool headerError_
Definition: CodeStreamDecompress.h:324
uint16_t marker_scratch_size_
Definition: CodeStreamDecompress.h:327
bool readHeader(grk_header_info *header_info)
Definition: CodeStreamDecompress.cpp:166
grk_io_pixels_callback ioBufferCallback
Definition: CodeStreamDecompress.h:331
GrkImage * getHeaderImage(void)
Definition: CodeStreamDecompress.cpp:660
bool readSOTorEOC(void)
Definition: CodeStreamDecompress_Markers.cpp:66
bool read_mct(uint8_t *headerData, uint16_t header_size)
Reads a MCT marker (Multiple Component Transform)
Definition: CodeStreamDecompress_Markers.cpp:1513
bool read_unk(void)
Definition: CodeStreamDecompress_Markers.cpp:1639
bool checkForIllegalTilePart(void)
Definition: CodeStreamDecompress.cpp:915
Definition: CodeStream.h:133
Definition: GrkImage.h:25
Definition: StripCache.h:110
Definition: TileCache.h:38
void(* grk_io_register_reclaim_callback)(grk_io_init io_init, grk_io_callback reclaim_callback, void *io_user_data, void *reclaim_user_data)
Definition: grok.h:452
bool(* grk_io_pixels_callback)(uint32_t threadId, grk_io_buf buffer, void *user_data)
Definition: grok.h:455
Copyright (C) 2016-2022 Grok Image Compression Inc.
Definition: ICacheable.h:20
std::function< bool(uint8_t *headerData, uint16_t header_size)> MARKER_FUNC
Definition: CodeStreamDecompress.h:26
Core decompression parameters.
Definition: grok.h:480
Header info.
Definition: grok.h:361
Image component.
Definition: grok.h:572
Plugin tile.
Definition: grok.h:739
Definition: LengthCache.h:70
Coding parameters.
Definition: CodingParams.h:245
Definition: CodingParams.h:310
Definition: IBufferedStream.h:20
Definition: CodeStream.h:115
Tile coding parameters : this structure is used to store coding/decoding parameters common to all til...
Definition: CodingParams.h:122
Definition: TileProcessor.h:78
Definition: geometry.h:102
Definition: CodeStreamDecompress.h:28
uint32_t states
value of the state when the marker can appear
Definition: CodeStreamDecompress.h:33
uint16_t id
marker value
Definition: CodeStreamDecompress.h:31
marker_handler(uint16_t ID, uint32_t flags, MARKER_FUNC f)
Definition: CodeStreamDecompress.h:29
MARKER_FUNC func
Definition: CodeStreamDecompress.h:34