Grok  9.5.0
CodeStreamDecompress.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 namespace grk
25 {
26 typedef 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  bool setDecompressWindow(grkRectU32 window);
51  bool decompress(grk_plugin_tile* tile);
52  bool decompressTile(uint16_t tileIndex);
53  bool endDecompress(void);
54  void initDecompress(grk_dparameters* p_param);
57  bool readMarker(void);
58  bool readMarker(bool suppressWarning);
59  GrkImage* getHeaderImage(void);
60  uint16_t getCurrentMarker();
61  int32_t tileIndexToDecode();
62  bool isWholeTileDecompress();
63  void dump(uint32_t flag, FILE* outputFileStream);
64 
65  protected:
66  void dump_MH_info(FILE* outputFileStream);
75  void dump_image_header(GrkImage* image, bool dev_dump_flag, FILE* outputFileStream);
76  void dump_tile_info(TileCodingParams* default_tile, uint32_t numcomps, FILE* outputFileStream);
85  void dump_image_comp_header(grk_image_comp* comp, bool dev_dump_flag, FILE* outputFileStream);
86 
87  private:
88  bool endOfCodeStream(void);
89  bool read_short(uint16_t* val);
90  bool process_marker(const marker_handler* marker_handler, uint16_t marker_size);
91  bool parseTileHeaderMarkers(bool* can_decode_tile_data);
92  bool readHeaderProcedureImpl(void);
93  bool decompressExec();
94  bool decompressT2T1(TileProcessor* tileProcessor);
95  bool decompressTile();
96  bool findNextTile(TileProcessor* tileProcessor);
97  bool decompressTiles(void);
98  bool decompressValidation(void);
99  bool copy_default_tcp(void);
100  bool read_unk(void);
101 
108  void addMarker(uint16_t id, uint64_t pos, uint32_t len);
116  bool read_mct(uint8_t* headerData, uint16_t header_size);
124  bool read_mcc(uint8_t* headerData, uint16_t header_size);
132  bool read_mco(uint8_t* headerData, uint16_t header_size);
133  bool add_mct(TileCodingParams* p_tcp, GrkImage* p_image, uint32_t index);
141  bool read_cbd(uint8_t* headerData, uint16_t header_size);
148  bool read_rgn(uint8_t* headerData, uint16_t header_size);
149 
150  bool readHeaderProcedure(void);
154  bool read_soc();
161  bool read_siz(uint8_t* headerData, uint16_t header_size);
168  bool read_cap(uint8_t* headerData, uint16_t header_size);
176  bool read_com(uint8_t* headerData, uint16_t header_size);
184  bool read_cod(uint8_t* headerData, uint16_t header_size);
191  bool read_poc(uint8_t* headerData, uint16_t header_size);
199  bool read_crg(uint8_t* headerData, uint16_t header_size);
206  bool read_tlm(uint8_t* headerData, uint16_t header_size);
214  bool read_plm(uint8_t* headerData, uint16_t header_size);
222  bool read_plt(uint8_t* headerData, uint16_t header_size);
230  bool read_ppm(uint8_t* headerData, uint16_t header_size);
238  bool read_ppt(uint8_t* headerData, uint16_t header_size);
246  bool read_sot(uint8_t* headerData, uint16_t header_size);
254  bool read_SPCod_SPCoc(uint32_t compno, uint8_t* headerData, uint16_t* header_size);
266  bool read_SQcd_SQcc(bool fromQCC, uint32_t compno, uint8_t* headerData, uint16_t* header_size);
273  bool merge_ppm(CodingParams* p_cp);
280  bool merge_ppt(TileCodingParams* p_tcp);
288  bool read_coc(uint8_t* headerData, uint16_t header_size);
295  bool read_qcd(uint8_t* headerData, uint16_t header_size);
303  bool read_qcc(uint8_t* headerData, uint16_t header_size);
304 
305  private:
313  const marker_handler* get_marker_handler(uint16_t id);
314 
315  std::map<uint16_t, marker_handler*> marker_map;
318  uint16_t m_curr_marker;
327 };
328 
329 } // namespace grk
Definition: CodeStreamDecompress.h:38
CodeStreamInfo * getCodeStreamInfo(void)
Definition: CodeStreamDecompress.cpp:189
uint16_t m_curr_marker
Definition: CodeStreamDecompress.h:318
void addMarker(uint16_t id, uint64_t pos, uint32_t len)
Add main header marker information.
Definition: CodeStreamDecompress.cpp:703
bool endDecompress(void)
Reading function used after code stream if necessary.
Definition: CodeStreamDecompress.cpp:2304
std::map< uint16_t, marker_handler * > marker_map
Definition: CodeStreamDecompress.h:315
void dump_image_header(GrkImage *image, bool dev_dump_flag, FILE *outputFileStream)
Dump an image header structure.
Definition: CodeStreamDecompress.cpp:3065
bool decompressTiles(void)
Definition: CodeStreamDecompress.cpp:499
uint8_t * m_marker_scratch
Definition: CodeStreamDecompress.h:323
bool isDecodingTilePartHeader()
Definition: CodeStreamDecompress.cpp:193
bool wholeTileDecompress
Definition: CodeStreamDecompress.h:317
void dump_MH_info(FILE *outputFileStream)
Definition: CodeStreamDecompress.cpp:3055
bool m_headerError
Definition: CodeStreamDecompress.h:319
bool read_plm(uint8_t *headerData, uint16_t header_size)
Reads a PLM marker (Packet length, main header marker)
Definition: CodeStreamDecompress.cpp:1174
bool read_SQcd_SQcc(bool fromQCC, uint32_t compno, uint8_t *headerData, uint16_t *header_size)
Reads a SQcd or SQcc element, i.e.
Definition: CodeStreamDecompress.cpp:1604
bool merge_ppm(CodingParams *p_cp)
Merges all PPM markers read (Packed headers, main header)
Definition: CodeStreamDecompress.cpp:1218
GrkImage * getImage(void)
Definition: CodeStreamDecompress.cpp:210
bool read_soc()
Reads a SOC marker (Start of Codestream)
Definition: CodeStreamDecompress.cpp:2805
bool parseTileHeaderMarkers(bool *can_decode_tile_data)
Definition: CodeStreamDecompress.cpp:2308
bool process_marker(const marker_handler *marker_handler, uint16_t marker_size)
Definition: CodeStreamDecompress.cpp:980
void dump(uint32_t flag, FILE *outputFileStream)
Definition: CodeStreamDecompress.cpp:3004
bool decompress(grk_plugin_tile *tile)
Definition: CodeStreamDecompress.cpp:407
bool read_rgn(uint8_t *headerData, uint16_t header_size)
Reads a RGN marker (Region Of Interest)
Definition: CodeStreamDecompress.cpp:1381
bool read_mco(uint8_t *headerData, uint16_t header_size)
Reads a MCO marker (Multiple Component Transform Ordering)
Definition: CodeStreamDecompress.cpp:1433
void initDecompress(grk_dparameters *p_param)
Definition: CodeStreamDecompress.cpp:398
bool read_ppm(uint8_t *headerData, uint16_t header_size)
Reads a PPM marker (Packed headers, main header)
Definition: CodeStreamDecompress.cpp:1204
bool read_cap(uint8_t *headerData, uint16_t header_size)
Reads a CAP marker.
Definition: CodeStreamDecompress.cpp:2833
bool readHeaderProcedure(void)
Definition: CodeStreamDecompress.cpp:724
bool read_mcc(uint8_t *headerData, uint16_t header_size)
Reads a MCC marker (Multiple Component Collection)
Definition: CodeStreamDecompress.cpp:1894
void dump_image_comp_header(grk_image_comp *comp, bool dev_dump_flag, FILE *outputFileStream)
Dump a component image header structure.
Definition: CodeStreamDecompress.cpp:3097
bool read_crg(uint8_t *headerData, uint16_t header_size)
Reads a CRG marker (Component registration)
Definition: CodeStreamDecompress.cpp:1146
bool read_cod(uint8_t *headerData, uint16_t header_size)
Reads a COD marker (Coding Style defaults)
Definition: CodeStreamDecompress.cpp:2556
bool read_com(uint8_t *headerData, uint16_t header_size)
Reads a COM marker (comments)
Definition: CodeStreamDecompress.cpp:2889
bool read_qcd(uint8_t *headerData, uint16_t header_size)
Reads a QCD marker (Quantization defaults)
Definition: CodeStreamDecompress.cpp:2712
void dump_tile_info(TileCodingParams *default_tile, uint32_t numcomps, FILE *outputFileStream)
Definition: CodeStreamDecompress.cpp:2943
TileCache * m_tileCache
Definition: CodeStreamDecompress.h:326
DecompressorState m_decompressorState
Definition: CodeStreamDecompress.h:316
std::vector< GrkImage * > getAllImages(void)
Definition: CodeStreamDecompress.cpp:206
bool read_cbd(uint8_t *headerData, uint16_t header_size)
Reads a CBD marker (Component bit depth definition)
Definition: CodeStreamDecompress.cpp:1559
bool setDecompressWindow(grkRectU32 window)
Definition: CodeStreamDecompress.cpp:294
bool read_plt(uint8_t *headerData, uint16_t header_size)
Reads a PLT marker (Packet length, tile-part header)
Definition: CodeStreamDecompress.cpp:1189
CodeStreamDecompress(IBufferedStream *stream)
Definition: CodeStreamDecompress.cpp:66
bool decompressTile()
Definition: CodeStreamDecompress.cpp:864
DecompressorState * getDecompressorState(void)
Definition: CodeStreamDecompress.cpp:197
bool read_SPCod_SPCoc(uint32_t compno, uint8_t *headerData, uint16_t *header_size)
Reads a SPCod or SPCoc element, i.e.
Definition: CodeStreamDecompress.cpp:1754
bool read_short(uint16_t *val)
Definition: CodeStreamDecompress.cpp:1007
int32_t m_tile_ind_to_dec
index of single tile to decompress; !!! initialized to -1 !!!
Definition: CodeStreamDecompress.h:322
TileProcessor * allocateProcessor(uint16_t tileIndex)
Definition: CodeStreamDecompress.cpp:157
bool copy_default_tcp(void)
Definition: CodeStreamDecompress.cpp:689
bool findNextTile(TileProcessor *tileProcessor)
Definition: CodeStreamDecompress.cpp:948
bool readHeaderProcedureImpl(void)
Definition: CodeStreamDecompress.cpp:738
uint16_t getCurrentMarker()
Definition: CodeStreamDecompress.cpp:708
bool read_qcc(uint8_t *headerData, uint16_t header_size)
Reads a QCC marker (Quantization component)
Definition: CodeStreamDecompress.cpp:2754
bool readMarker(void)
Definition: CodeStreamDecompress.cpp:1027
bool read_ppt(uint8_t *headerData, uint16_t header_size)
Reads a PPT marker (Packed packet headers, tile-part header)
Definition: CodeStreamDecompress.cpp:1229
bool add_mct(TileCodingParams *p_tcp, GrkImage *p_image, uint32_t index)
Definition: CodeStreamDecompress.cpp:1480
TileCodingParams * get_current_decode_tcp(void)
Definition: CodeStreamDecompress.cpp:182
bool merge_ppt(TileCodingParams *p_tcp)
Merges all PPT markers read (Packed headers, tile-part header)
Definition: CodeStreamDecompress.cpp:1312
bool read_siz(uint8_t *headerData, uint16_t header_size)
Reads a SIZ marker (image and tile size)
Definition: CodeStreamDecompress.cpp:2876
GrkImage * getCompositeImage()
Definition: CodeStreamDecompress.cpp:153
int32_t tileIndexToDecode()
Definition: CodeStreamDecompress.cpp:720
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:1016
bool decompressExec()
Definition: CodeStreamDecompress.cpp:838
bool read_coc(uint8_t *headerData, uint16_t header_size)
Reads a COC marker (Coding Style Component)
Definition: CodeStreamDecompress.cpp:2666
virtual ~CodeStreamDecompress()
Definition: CodeStreamDecompress.cpp:143
bool read_tlm(uint8_t *headerData, uint16_t header_size)
Reads a TLM marker (Tile Length Marker)
Definition: CodeStreamDecompress.cpp:1597
bool decompressValidation(void)
Definition: CodeStreamDecompress.cpp:973
bool endOfCodeStream(void)
Definition: CodeStreamDecompress.cpp:493
bool isWholeTileDecompress()
Definition: CodeStreamDecompress.cpp:712
bool read_sot(uint8_t *headerData, uint16_t header_size)
Read SOT (Start of tile part) marker.
Definition: CodeStreamDecompress.cpp:1368
bool read_poc(uint8_t *headerData, uint16_t header_size)
Reads a POC marker (Progression Order Change)
Definition: CodeStreamDecompress.cpp:1053
GrkImage * m_outputImage
Definition: CodeStreamDecompress.h:325
bool readHeader(grk_header_info *header_info)
Definition: CodeStreamDecompress.cpp:214
GrkImage * getHeaderImage(void)
Definition: CodeStreamDecompress.cpp:716
uint16_t m_marker_scratch_size
Definition: CodeStreamDecompress.h:324
bool read_mct(uint8_t *headerData, uint16_t header_size)
Reads a MCT marker (Multiple Component Transform)
Definition: CodeStreamDecompress.cpp:2141
bool read_unk(void)
Definition: CodeStreamDecompress.cpp:2267
bool decompressT2T1(TileProcessor *tileProcessor)
Definition: CodeStreamDecompress.cpp:931
Definition: CodeStream.h:128
Definition: GrkImage.h:19
Definition: TileCache.h:38
Copyright (C) 2016-2021 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 decompress parameters.
Definition: grok.h:740
Header info.
Definition: grok.h:681
Image component.
Definition: grok.h:919
Plugin tile.
Definition: grok.h:1096
Definition: LengthCache.h:76
Coding parameters.
Definition: CodingParams.h:242
Definition: CodingParams.h:306
Definition: IBufferedStream.h:20
Definition: CodeStream.h:111
Tile coding parameters : this structure is used to store coding/decoding parameters common to all til...
Definition: CodingParams.h:122
Tile processor for decompression and compression.
Definition: TileProcessor.h:77
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