Grok 20.3.2
FileFormatMJ2Compress.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#pragma once
18
19#include <vector>
20
21namespace grk
22{
23
28{
32 int32_t decod_format;
34 int32_t cod_format;
36 int32_t Dim[2];
38 int32_t w;
40 int32_t h;
41 /* Sample rate of YUV 4:4:4, 4:2:2 or 4:2:0 */
43 /* Sample rate of YUV 4:4:4, 4:2:2 or 4:2:0 */
45 /* Video Frame Rate */
46 int32_t frame_rate;
47 /* In YUV files, numcomps always considered as 3 */
48 int32_t numcomps;
49 /* In YUV files, precision always considered as 8 */
50 int32_t prec;
51 uint32_t meth;
52 uint32_t enumcs;
53};
54
59{
60 uint64_t offset; // absolute file offset of JP2C box start
61 uint32_t size; // total size including JP2C box header
62};
63
65{
66public:
67 explicit FileFormatMJ2Compress(IStream* stream);
68 ~FileFormatMJ2Compress() override;
69
70 bool init(grk_cparameters* param, GrkImage* image) override;
71 bool start(void) override;
72 uint64_t compress(grk_plugin_tile* tile) override;
73 uint64_t compressFrame(GrkImage* image, grk_plugin_tile* tile) override;
74 bool finalize(void) override;
75
76private:
77 bool write_mj2_signature(void);
78 bool write_mj2_ftyp(void);
79 bool write_moov(void);
80 uint8_t* write_mvhd(uint32_t* p_nb_bytes_written);
81 uint8_t* write_trak(uint32_t* p_nb_bytes_written);
82 uint8_t* write_tkhd(uint32_t* p_nb_bytes_written);
83 uint8_t* write_mdia(uint32_t* p_nb_bytes_written);
84 uint8_t* write_mdhd(uint32_t* p_nb_bytes_written);
85 uint8_t* write_hdlr(uint32_t* p_nb_bytes_written);
86 uint8_t* write_minf(uint32_t* p_nb_bytes_written);
87 uint8_t* write_vmhd(uint32_t* p_nb_bytes_written);
88 uint8_t* write_dinf(uint32_t* p_nb_bytes_written);
89 uint8_t* write_stbl(uint32_t* p_nb_bytes_written);
90 uint8_t* write_stsd(uint32_t* p_nb_bytes_written);
91 uint8_t* write_smj2(uint32_t* p_nb_bytes_written);
92 uint8_t* write_stts(uint32_t* p_nb_bytes_written);
93 uint8_t* write_stsc(uint32_t* p_nb_bytes_written);
94 uint8_t* write_stsz(uint32_t* p_nb_bytes_written);
95 uint8_t* write_stco(uint32_t* p_nb_bytes_written);
96 bool write_mdat_header(void);
97 bool write_mdat_finalize(void);
98
99 uint64_t mdat_offset_;
100 uint32_t timescale_;
101 uint32_t frame_rate_;
104 std::vector<MJ2SampleRecord> sampleRecords_;
105};
106
107} // namespace grk
FileFormatJP2Compress(IStream *stream)
Definition FileFormatJP2Compress.cpp:66
uint64_t compressFrame(GrkImage *image, grk_plugin_tile *tile) override
Definition FileFormatMJ2Compress.cpp:191
bool write_mj2_signature(void)
Definition FileFormatMJ2Compress.cpp:84
uint8_t * write_minf(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:742
uint32_t timescale_
Definition FileFormatMJ2Compress.h:100
bool init(grk_cparameters *param, GrkImage *image) override
Definition FileFormatMJ2Compress.cpp:70
uint8_t * write_vmhd(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:419
grk_cparameters compressParams_
Definition FileFormatMJ2Compress.h:103
uint8_t * write_stts(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:479
bool finalized_
Definition FileFormatMJ2Compress.h:102
~FileFormatMJ2Compress() override
Definition FileFormatMJ2Compress.cpp:64
uint8_t * write_stsd(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:657
uint8_t * write_dinf(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:444
uint64_t compress(grk_plugin_tile *tile) override
Definition FileFormatMJ2Compress.cpp:151
bool write_moov(void)
Definition FileFormatMJ2Compress.cpp:810
bool write_mdat_header(void)
Definition FileFormatMJ2Compress.cpp:94
uint8_t * write_stco(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:556
bool start(void) override
Definition FileFormatMJ2Compress.cpp:129
uint8_t * write_mdia(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:765
bool write_mj2_ftyp(void)
Definition FileFormatMJ2Compress.cpp:89
uint8_t * write_stsz(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:530
uint32_t frame_rate_
Definition FileFormatMJ2Compress.h:101
uint8_t * write_tkhd(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:306
uint8_t * write_stbl(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:717
FileFormatMJ2Compress(IStream *stream)
Definition FileFormatMJ2Compress.cpp:59
uint64_t mdat_offset_
Definition FileFormatMJ2Compress.h:99
uint8_t * write_mvhd(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:260
uint8_t * write_smj2(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:580
bool finalize(void) override
Definition FileFormatMJ2Compress.cpp:238
std::vector< MJ2SampleRecord > sampleRecords_
Definition FileFormatMJ2Compress.h:104
uint8_t * write_trak(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:788
uint8_t * write_stsc(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:504
bool write_mdat_finalize(void)
Definition FileFormatMJ2Compress.cpp:110
uint8_t * write_hdlr(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:389
uint8_t * write_mdhd(uint32_t *p_nb_bytes_written)
Definition FileFormatMJ2Compress.cpp:356
Stores header and data for an image.
Definition GrkImage.h:54
#define GRK_PATH_LEN
Definition grok.h:327
ResWindow.
Definition CompressedChunkCache.h:36
Definition IStream.h:60
Records the offset and size of a compressed sample within the mdat box.
Definition FileFormatMJ2Compress.h:59
uint64_t offset
Definition FileFormatMJ2Compress.h:60
uint32_t size
Definition FileFormatMJ2Compress.h:61
Compression parameters.
Definition FileFormatMJ2Compress.h:28
int32_t CbCr_subsampling_dy
Definition FileFormatMJ2Compress.h:44
int32_t cod_format
output file format 0:YUV
Definition FileFormatMJ2Compress.h:34
uint32_t enumcs
Definition FileFormatMJ2Compress.h:52
int32_t decod_format
input file format 0:MJ2
Definition FileFormatMJ2Compress.h:32
int32_t w
YUV Frame width.
Definition FileFormatMJ2Compress.h:38
int32_t frame_rate
Definition FileFormatMJ2Compress.h:46
int32_t numcomps
Definition FileFormatMJ2Compress.h:48
int32_t prec
Definition FileFormatMJ2Compress.h:50
int32_t CbCr_subsampling_dx
Definition FileFormatMJ2Compress.h:42
int32_t Dim[2]
Portion of the image coded.
Definition FileFormatMJ2Compress.h:36
int32_t h
YUV Frame height.
Definition FileFormatMJ2Compress.h:40
char infile[GRK_PATH_LEN]
Definition FileFormatMJ2Compress.h:29
uint32_t meth
Definition FileFormatMJ2Compress.h:51
char outfile[GRK_PATH_LEN]
Definition FileFormatMJ2Compress.h:30
Compression parameters.
Plugin tile.