Grok  9.5.0
FileFormatDecompress.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, uint32_t header_size)> BOX_FUNC;
27 
29 {
30  public:
32  virtual ~FileFormatDecompress();
33 
34  static void free_color(grk_color* color);
35 
36  bool readHeader(grk_header_info* header_info);
37  GrkImage* getImage(uint16_t tileIndex);
38  GrkImage* getImage(void);
39  void initDecompress(grk_dparameters* p_param);
40  bool setDecompressWindow(grkRectU32 window);
41  bool decompress(grk_plugin_tile* tile);
42  bool decompressTile(uint16_t tileIndex);
43  bool endDecompress(void);
44  void dump(uint32_t flag, FILE* outputFileStream);
45 
46  private:
47  static void alloc_palette(grk_color* color, uint8_t num_channels, uint16_t num_entries);
48  static void free_palette_clr(grk_color* color);
49  uint32_t read_asoc(AsocBox* parent, uint8_t** header_data, uint32_t* header_data_size,
50  uint32_t asocSize);
51  bool readHeaderProcedureImpl(void);
52  bool read_box_hdr(FileFormatBox* box, uint32_t* p_number_bytes_read, IBufferedStream* stream);
53  bool read_ihdr(uint8_t* p_image_header_data, uint32_t image_header_size);
54  bool read_xml(uint8_t* p_xml_data, uint32_t xml_size);
55  bool read_uuid(uint8_t* headerData, uint32_t header_size);
56  bool read_res_box(uint32_t* id, uint32_t* num, uint32_t* den, uint32_t* exponent,
57  uint8_t** p_resolution_data);
58  bool read_res(uint8_t* p_resolution_data, uint32_t resolution_size);
59  double calc_res(uint16_t num, uint16_t den, uint8_t exponent);
60  bool read_bpc(uint8_t* p_bpc_header_data, uint32_t bpc_header_size);
62  bool read_channel_definition(uint8_t* p_cdef_header_data, uint32_t cdef_header_size);
63  bool read_colr(uint8_t* p_colr_header_data, uint32_t colr_header_size);
64  bool check_color(GrkImage* image, grk_color* color);
66  bool read_component_mapping(uint8_t* component_mapping_header_data,
67  uint32_t component_mapping_header_size);
68  bool read_palette_clr(uint8_t* p_pclr_header_data, uint32_t pclr_header_size);
69  const BOX_FUNC find_handler(uint32_t id);
70  const BOX_FUNC img_find_handler(uint32_t id);
71  bool read_jp(uint8_t* headerData, uint32_t header_size);
72  bool read_ftyp(uint8_t* headerData, uint32_t header_size);
73  bool read_jp2h(uint8_t* headerData, uint32_t header_size);
74  bool read_box(FileFormatBox* box, uint8_t* p_data, uint32_t* p_number_bytes_read,
75  uint64_t p_box_max_size);
76  bool read_asoc(uint8_t* header_data, uint32_t header_data_size);
77  void serializeAsoc(AsocBox* asoc, grk_asoc* serial_asocs, uint32_t* num_asocs, uint32_t level);
78  void init_end_header_reading(void);
79 
80  bool applyColour(GrkImage* img);
81  bool applyColour(void);
82  std::map<uint32_t, BOX_FUNC> header;
83  std::map<uint32_t, BOX_FUNC> img_header;
84 
88  uint32_t jp2_state;
89 };
90 
91 } // namespace grk
Definition: CodeStreamDecompress.h:38
Definition: FileFormatDecompress.h:29
bool read_ihdr(uint8_t *p_image_header_data, uint32_t image_header_size)
Definition: FileFormatDecompress.cpp:673
bool read_jp2h(uint8_t *headerData, uint32_t header_size)
Reads the Jpeg2000 file Header box - JP2 Header box (warning, this is a super box).
Definition: FileFormatDecompress.cpp:1669
void apply_channel_definition(GrkImage *image, grk_color *color)
Definition: FileFormatDecompress.cpp:879
uint32_t jp2_state
Definition: FileFormatDecompress.h:88
bool read_bpc(uint8_t *p_bpc_header_data, uint32_t bpc_header_size)
Definition: FileFormatDecompress.cpp:854
bool read_box_hdr(FileFormatBox *box, uint32_t *p_number_bytes_read, IBufferedStream *stream)
Definition: FileFormatDecompress.cpp:631
bool read_channel_definition(uint8_t *p_cdef_header_data, uint32_t cdef_header_size)
Definition: FileFormatDecompress.cpp:934
bool read_res_box(uint32_t *id, uint32_t *num, uint32_t *den, uint32_t *exponent, uint8_t **p_resolution_data)
Definition: FileFormatDecompress.cpp:791
static void alloc_palette(grk_color *color, uint8_t num_channels, uint16_t num_entries)
Definition: FileFormatDecompress.cpp:50
FileFormatDecompress(IBufferedStream *stream)
Definition: FileFormatDecompress.cpp:26
bool read_palette_clr(uint8_t *p_pclr_header_data, uint32_t pclr_header_size)
Definition: FileFormatDecompress.cpp:1487
AsocBox root_asoc
Definition: FileFormatDecompress.h:86
bool applyColour(void)
Definition: FileFormatDecompress.cpp:366
bool readHeader(grk_header_info *header_info)
Main header reading function handler.
Definition: FileFormatDecompress.cpp:158
std::map< uint32_t, BOX_FUNC > header
Definition: FileFormatDecompress.h:82
void serializeAsoc(AsocBox *asoc, grk_asoc *serial_asocs, uint32_t *num_asocs, uint32_t level)
Definition: FileFormatDecompress.cpp:123
double calc_res(uint16_t num, uint16_t den, uint8_t exponent)
Definition: FileFormatDecompress.cpp:784
const BOX_FUNC find_handler(uint32_t id)
Definition: FileFormatDecompress.cpp:1554
bool decompressTile(uint16_t tileIndex)
Definition: FileFormatDecompress.cpp:347
std::map< uint32_t, BOX_FUNC > img_header
Definition: FileFormatDecompress.h:83
void initDecompress(grk_dparameters *p_param)
Set up decompressor function handler.
Definition: FileFormatDecompress.cpp:329
virtual ~FileFormatDecompress()
Definition: FileFormatDecompress.cpp:46
static void free_color(grk_color *color)
Definition: FileFormatDecompress.cpp:82
bool read_uuid(uint8_t *headerData, uint32_t header_size)
Definition: FileFormatDecompress.cpp:760
bool decompress(grk_plugin_tile *tile)
Definition: FileFormatDecompress.cpp:337
bool read_ftyp(uint8_t *headerData, uint32_t header_size)
Reads a a FTYP box - File type box.
Definition: FileFormatDecompress.cpp:1614
const BOX_FUNC img_find_handler(uint32_t id)
Finds the image execution function related to the given box id.
Definition: FileFormatDecompress.cpp:1566
void init_end_header_reading(void)
Definition: FileFormatDecompress.cpp:96
static void free_palette_clr(grk_color *color)
Definition: FileFormatDecompress.cpp:67
bool read_colr(uint8_t *p_colr_header_data, uint32_t colr_header_size)
Definition: FileFormatDecompress.cpp:1031
bool read_res(uint8_t *p_resolution_data, uint32_t resolution_size)
Definition: FileFormatDecompress.cpp:815
bool readHeaderProcedureImpl(void)
Definition: FileFormatDecompress.cpp:480
bool check_color(GrkImage *image, grk_color *color)
Definition: FileFormatDecompress.cpp:1154
uint32_t read_asoc(AsocBox *parent, uint8_t **header_data, uint32_t *header_data_size, uint32_t asocSize)
Definition: FileFormatDecompress.cpp:400
bool read_component_mapping(uint8_t *component_mapping_header_data, uint32_t component_mapping_header_size)
Definition: FileFormatDecompress.cpp:1441
bool endDecompress(void)
Reading function used after code stream if necessary.
Definition: FileFormatDecompress.cpp:358
bool read_xml(uint8_t *p_xml_data, uint32_t xml_size)
Definition: FileFormatDecompress.cpp:745
CodeStreamDecompress * codeStream
Definition: FileFormatDecompress.h:87
bool setDecompressWindow(grkRectU32 window)
Definition: FileFormatDecompress.cpp:324
void dump(uint32_t flag, FILE *outputFileStream)
Definition: FileFormatDecompress.cpp:476
bool read_jp(uint8_t *headerData, uint32_t header_size)
Reads a JPEG 2000 file signature box.
Definition: FileFormatDecompress.cpp:1579
bool apply_palette_clr(GrkImage *image, grk_color *color)
Definition: FileFormatDecompress.cpp:1303
bool read_box(FileFormatBox *box, uint8_t *p_data, uint32_t *p_number_bytes_read, uint64_t p_box_max_size)
Definition: FileFormatDecompress.cpp:1711
GrkImage * getImage(void)
Definition: FileFormatDecompress.cpp:153
bool m_headerError
Definition: FileFormatDecompress.h:85
JPEG 2000 file format reader/writer.
Definition: FileFormat.h:133
grk_color color
Definition: FileFormat.h:164
Definition: GrkImage.h:19
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: ICacheable.h:20
std::function< bool(uint8_t *headerData, uint32_t header_size)> BOX_FUNC
Definition: FileFormatDecompress.h:26
Core decompress parameters.
Definition: grok.h:740
Header info.
Definition: grok.h:681
Plugin tile.
Definition: grok.h:1096
Association box (defined in ITU 15444-2 Annex M 11.1 )
Definition: FileFormat.h:96
Definition: FileFormat.h:80
Definition: IBufferedStream.h:20
Definition: CodeStream.h:111
Definition: grok.h:670
ICC profile, palette, channel definition.
Definition: grok.h:661