Grok 20.3.2
FileFormatJP2Compress.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016-2026 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
18#pragma once
19
20namespace grk
21{
23{
24public:
25 explicit FileFormatJP2Compress(IStream* stream);
26 virtual ~FileFormatJP2Compress();
27
28 bool init(grk_cparameters* param, GrkImage* image) override;
29 bool start(void) override;
30 uint64_t compress(grk_plugin_tile* tile) override;
31
32 /* Transcode: write JP2 boxes then copy raw codestream from source */
33 uint64_t transcode(IStream* srcStream);
34
35protected:
36 GrkImage* getHeaderImage(void) override;
37 uint8_t* write_ihdr(uint32_t* p_nb_bytes_written);
38 uint8_t* write_colr(uint32_t* p_nb_bytes_written);
41
42private:
43 bool end(void);
44 grk_color* getColour(void);
45 void find_cf(double x, uint16_t* num, uint16_t* den);
46 void write_res_box(double resx, double resy, uint32_t box_id, uint8_t** current_res_ptr);
47 uint8_t* write_res(uint32_t* p_nb_bytes_written);
48 uint8_t* write_bpc(uint32_t* p_nb_bytes_written);
49 uint8_t* write_component_mapping(uint32_t* p_nb_bytes_written);
50 uint8_t* write_palette_clr(uint32_t* p_nb_bytes_written);
51 uint8_t* write_channel_definition(uint32_t* p_nb_bytes_written);
52 bool write_jp2h(void);
53 bool write_ftyp(void);
54 bool write_signature(void);
55
56 bool write_uuids(void);
57 bool write_jp2c(void);
58 bool default_validation(void);
60 void init_end_header_writing(void);
61 uint8_t* write_xml(uint32_t* p_nb_bytes_written);
62 bool write_xml_boxes(void);
63 bool write_ipr(void);
64 bool write_asoc_boxes(void);
65 bool write_rreq(void);
66 bool skip_jp2c(void);
67 uint32_t calcAsocSize(AsocBox* asoc);
68 bool writeAsocBox(IStream* stream, AsocBox* asoc);
69 void buildAsocTree(const grk_asoc* flat, uint32_t count);
70
72 uint64_t codestream_offset = 0;
73 bool jpx_branding_ = false;
74 bool write_rreq_ = false;
75 uint16_t rreq_standard_features_[8] = {};
78 bool transcode_mode_ = false;
84 uint8_t max_res_transcode_ = 0;
87 uint64_t transcodeCodestream(IStream* srcStream, uint64_t csStart, uint64_t csLength);
88};
89
90} // namespace grk
Definition CodeStreamCompress.h:24
uint16_t rreq_standard_features_[8]
Definition FileFormatJP2Compress.h:75
bool write_signature(void)
Definition FileFormatJP2Compress.cpp:87
bool write_jp2c(void)
Definition FileFormatJP2Compress.cpp:91
bool init(grk_cparameters *param, GrkImage *image) override
Definition FileFormatJP2Compress.cpp:704
grk_stream_params transcode_src_
Definition FileFormatJP2Compress.h:86
GrkImage * inputImage_
Definition FileFormatJP2Compress.h:40
uint8_t num_rreq_standard_features_
Definition FileFormatJP2Compress.h:76
bool jpx_branding_
Definition FileFormatJP2Compress.h:73
uint8_t * write_ihdr(uint32_t *p_nb_bytes_written)
Definition FileFormatJP2Compress.cpp:633
uint16_t max_layers_transcode_
Definition FileFormatJP2Compress.h:83
uint64_t codestream_offset
Definition FileFormatJP2Compress.h:72
void buildAsocTree(const grk_asoc *flat, uint32_t count)
Definition FileFormatJP2Compress.cpp:1996
uint8_t max_res_transcode_
Definition FileFormatJP2Compress.h:84
uint64_t transcode(IStream *srcStream)
Definition FileFormatJP2Compress.cpp:958
bool write_xml_boxes(void)
Definition FileFormatJP2Compress.cpp:571
virtual ~FileFormatJP2Compress()
Definition FileFormatJP2Compress.cpp:69
void write_res_box(double resx, double resy, uint32_t box_id, uint8_t **current_res_ptr)
Definition FileFormatJP2Compress.cpp:514
bool write_rreq_
Definition FileFormatJP2Compress.h:74
void init_header_writing()
Definition FileFormatJP2Compress.cpp:1888
GrkImage * getHeaderImage(void) override
Definition FileFormatJP2Compress.cpp:75
uint64_t transcodeCodestream(IStream *srcStream, uint64_t csStart, uint64_t csLength)
Definition FileFormatJP2Compress.cpp:1070
bool skip_jp2c(void)
Definition FileFormatJP2Compress.cpp:1904
bool start(void) override
Definition FileFormatJP2Compress.cpp:675
bool write_jp2h(void)
Definition FileFormatJP2Compress.cpp:165
bool default_validation(void)
Definition FileFormatJP2Compress.cpp:1914
void find_cf(double x, uint16_t *num, uint16_t *den)
Definition FileFormatJP2Compress.cpp:484
grk_color * getColour(void)
Definition FileFormatJP2Compress.cpp:80
uint8_t * write_bpc(uint32_t *p_nb_bytes_written)
Definition FileFormatJP2Compress.cpp:424
bool write_ipr(void)
Definition FileFormatJP2Compress.cpp:614
uint64_t compress(grk_plugin_tile *tile) override
Definition FileFormatJP2Compress.cpp:942
bool writeAsocBox(IStream *stream, AsocBox *asoc)
Definition FileFormatJP2Compress.cpp:1951
void init_end_header_writing(void)
Definition FileFormatJP2Compress.cpp:1876
bool write_sop_transcode_
Definition FileFormatJP2Compress.h:81
uint8_t * write_colr(uint32_t *p_nb_bytes_written)
Definition FileFormatJP2Compress.cpp:325
FileFormatJP2Compress(IStream *stream)
Definition FileFormatJP2Compress.cpp:66
bool write_asoc_boxes(void)
Definition FileFormatJP2Compress.cpp:2031
uint8_t * write_channel_definition(uint32_t *p_nb_bytes_written)
Definition FileFormatJP2Compress.cpp:384
bool write_plt_transcode_
Definition FileFormatJP2Compress.h:80
CodeStreamCompress * codeStream
Definition FileFormatJP2Compress.h:39
bool write_rreq(void)
Definition FileFormatJP2Compress.cpp:2044
bool write_uuids(void)
Definition FileFormatJP2Compress.cpp:139
bool end(void)
Definition FileFormatJP2Compress.cpp:1869
uint8_t * write_res(uint32_t *p_nb_bytes_written)
Definition FileFormatJP2Compress.cpp:450
uint8_t * write_xml(uint32_t *p_nb_bytes_written)
Definition FileFormatJP2Compress.cpp:567
bool geoboxes_after_jp2c_
Definition FileFormatJP2Compress.h:77
bool needs_xl_jp2c_box_length
Definition FileFormatJP2Compress.h:71
bool transcode_mode_
Definition FileFormatJP2Compress.h:78
GRK_PROG_ORDER transcode_prog_order_
Definition FileFormatJP2Compress.h:85
uint8_t * write_palette_clr(uint32_t *p_nb_bytes_written)
Definition FileFormatJP2Compress.cpp:252
uint32_t calcAsocSize(AsocBox *asoc)
Definition FileFormatJP2Compress.cpp:1931
bool write_ftyp(void)
Definition FileFormatJP2Compress.cpp:135
bool write_tlm_transcode_
Definition FileFormatJP2Compress.h:79
bool write_eph_transcode_
Definition FileFormatJP2Compress.h:82
uint8_t * write_component_mapping(uint32_t *p_nb_bytes_written)
Definition FileFormatJP2Compress.cpp:299
FileFormatJP2Family(IStream *stream)
Definition FileFormatJP2Family.cpp:48
Stores header and data for an image.
Definition GrkImage.h:54
enum _GRK_PROG_ORDER GRK_PROG_ORDER
Environment variables.
@ GRK_PROG_UNKNOWN
Definition grok.h:75
ResWindow.
Definition CompressedChunkCache.h:36
Association box (defined in ITU 15444-2 Annex M 11.1 ).
Definition FileFormatJP2Family.h:121
Definition ICompressor.h:24
Definition IStream.h:60
Association box info.
ICC profile, palette, channel definition.
Compression parameters.
Plugin tile.
JPEG 2000 stream parameters There are three methods of streaming: by file, buffer or callback Client ...