Grok 20.3.2
FileFormatMJ2.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
20#include <unordered_map>
21
22namespace grk
23{
24
25#define MJ2_MJ2 0x6d6a7032
26#define MJ2_MJ2S 0x6d6a3273
27#define MJ2_MDAT 0x6d646174
28#define MJ2_MOOV 0x6d6f6f76
29#define MJ2_MVHD 0x6d766864
30#define MJ2_TRAK 0x7472616b
31#define MJ2_TKHD 0x746b6864
32#define MJ2_MDIA 0x6d646961
33#define MJ2_MDHD 0x6d646864
34#define MJ2_MHDR 0x6d686472
35#define MJ2_HDLR 0x68646C72
36#define MJ2_MINF 0x6d696e66
37#define MJ2_VMHD 0x766d6864
38#define MJ2_SMHD 0x736d6864
39#define MJ2_HMHD 0x686d6864
40#define MJ2_DINF 0x64696e66
41#define MJ2_DREF 0x64726566
42#define MJ2_URL 0x75726c20
43#define MJ2_URN 0x75726e20
44#define MJ2_STBL 0x7374626c
45#define MJ2_STSD 0x73747364
46#define MJ2_STTS 0x73747473
47#define MJ2_STSC 0x73747363
48#define MJ2_STSZ 0x7374737a
49#define MJ2_STCO 0x7374636f
50#define MJ2_MOOF 0x6d6f6f66
51#define MJ2_FREE 0x66726565
52#define MJ2_SKIP 0x736b6970
53#define MJ2_JP2C 0x6a703263
54#define MJ2_FIEL 0x6669656c
55#define MJ2_JP2P 0x6a703270
56#define MJ2_JP2X 0x6a703278
57#define MJ2_JSUB 0x6a737562
58#define MJ2_ORFO 0x6f72666f
59#define MJ2_MVEX 0x6d766578
60#define MJ2_JP2 0x6a703220
61#define MJ2_J2P0 0x4a325030
62
63#define MJ2_VIDE 0x76696465
64#define MJ2_SOUN 0x736F756E
65#define MJ2_HINT 0x68696E74
66
67#define MJ2_TRACK_TYPE_VIDEO 0
68#define MJ2_TRACK_TYPE_SOUND 1
69#define MJ2_TRACK_TYPE_HINT 2
70
74struct mj2_tts
75{
79};
80
85{
87 uint32_t num_samples_;
89 uint32_t offset_;
90};
91
102
107{
110 uint32_t offset_;
112};
113
118{
120 {
121 for(uint32_t i = 0; i < 4; ++i)
122 location_[i] = 0;
123 }
124 int32_t location_[4];
125};
126
131{
133 {
134 for(uint32_t i = 0; i < 2; ++i)
135 name_[i] = 0;
136
137 for(uint32_t i = 0; i < 4; ++i)
138 location_[i] = 0;
139 }
140 int32_t name_[2];
141 int32_t location_[4];
142};
143
147struct mj2_tk
148{
149 mj2_tk();
150 ~mj2_tk();
151 int32_t track_type_;
154 int32_t duration_;
155 int32_t timescale_;
156 int16_t layer_;
157 int16_t volume_;
158 int16_t language_;
159 int16_t balance_;
160 int16_t maxPDUsize_;
161 int16_t avgPDUsize_;
162 int32_t maxbitrate_;
163 int32_t avgbitrate_;
166 int16_t opcolor_[3];
167 std::vector<mj2_url> url_;
168 std::vector<mj2_urn> urn_;
169 int32_t Dim_[2];
170 int16_t w_;
171 int16_t h_;
172 int32_t visual_w_;
173 int32_t visual_h_;
180 int32_t compressorname_[8];
181 int16_t depth_;
182 uint8_t fieldcount_;
183 uint8_t fieldorder_;
186 std::vector<uint32_t> br_;
187 uint8_t num_jp2x_;
188 uint8_t* jp2xdata_;
189 uint8_t hsub_;
190 uint8_t vsub_;
191 uint8_t hoff_;
192 uint8_t voff_;
193 int32_t trans_matrix_[9];
194 uint32_t num_samples_;
195 int32_t transorm_;
197 uint32_t name_size_;
199 std::vector<mj2_tts> tts_;
200 std::vector<mj2_chunk> chunks_;
201 std::vector<mj2_sampletochunk> sampletochunk_;
202 std::string name_;
203 std::vector<mj2_sample> samples_;
204};
205
207{
208public:
209 explicit FileFormatMJ2(IStream* stream);
210 ~FileFormatMJ2() override;
211
212protected:
213 GrkImage* getHeaderImage(void) override;
214 // stores header image information (decompress/compress)
215 // decompress: components are subsampled and resolution-reduced
219 int32_t timescale_;
220 uint32_t duration_;
221 int32_t rate_;
222 int32_t num_vtk_;
223 int32_t num_stk_;
224 int32_t num_htk_;
225 int16_t volume_;
226 int32_t trans_matrix_[9];
227 int32_t next_tk_id_;
228 std::unordered_map<int32_t, mj2_tk*> tracks_;
230};
231
232} // namespace grk
FileFormatJP2Family(IStream *stream)
Definition FileFormatJP2Family.cpp:48
int32_t next_tk_id_
Definition FileFormatMJ2.h:227
int32_t num_stk_
Definition FileFormatMJ2.h:223
int32_t trans_matrix_[9]
Definition FileFormatMJ2.h:226
~FileFormatMJ2() override
Definition FileFormatMJ2.cpp:74
int32_t timescale_
Definition FileFormatMJ2.h:219
std::unordered_map< int32_t, mj2_tk * > tracks_
Definition FileFormatMJ2.h:228
uint32_t modification_time_
Definition FileFormatMJ2.h:218
int32_t num_vtk_
Definition FileFormatMJ2.h:222
uint32_t creation_time_
Definition FileFormatMJ2.h:217
GrkImage * headerImage_
Definition FileFormatMJ2.h:216
FileFormatMJ2(IStream *stream)
Definition FileFormatMJ2.cpp:65
GrkImage * getHeaderImage(void) override
Definition FileFormatMJ2.cpp:81
mj2_tk * current_track_
Definition FileFormatMJ2.h:229
uint32_t duration_
Definition FileFormatMJ2.h:220
int16_t volume_
Definition FileFormatMJ2.h:225
int32_t rate_
Definition FileFormatMJ2.h:221
int32_t num_htk_
Definition FileFormatMJ2.h:224
Stores header and data for an image.
Definition GrkImage.h:54
ResWindow.
Definition CompressedChunkCache.h:36
Definition IStream.h:60
uint32_t offset_
Definition FileFormatMJ2.h:89
uint32_t num_samples_
Definition FileFormatMJ2.h:87
uint32_t samples_descr_idx_
Definition FileFormatMJ2.h:88
mj2_chunk()
Definition FileFormatMJ2.h:86
uint32_t offset_
Definition FileFormatMJ2.h:110
uint32_t samples_size_
Definition FileFormatMJ2.h:109
mj2_sample()
Definition FileFormatMJ2.h:108
int32_t samples_delta_
Definition FileFormatMJ2.h:111
uint32_t samples_per_chunk_
Definition FileFormatMJ2.h:99
uint32_t first_chunk_
Definition FileFormatMJ2.h:98
uint32_t samples_descr_idx_
Definition FileFormatMJ2.h:100
mj2_sampletochunk()
Definition FileFormatMJ2.h:97
Video Track Parameters.
Definition FileFormatMJ2.h:148
std::vector< mj2_sample > samples_
Definition FileFormatMJ2.h:203
int32_t horizresolution_
Definition FileFormatMJ2.h:178
int32_t transorm_
Definition FileFormatMJ2.h:195
std::vector< mj2_chunk > chunks_
Definition FileFormatMJ2.h:200
uint8_t hoff_
Definition FileFormatMJ2.h:191
int32_t CbCr_subsampling_dx_
Definition FileFormatMJ2.h:174
int32_t vertresolution_
Definition FileFormatMJ2.h:179
uint8_t or_fieldcount_
Definition FileFormatMJ2.h:184
int16_t graphicsmode_
Definition FileFormatMJ2.h:165
uint32_t modification_time_
Definition FileFormatMJ2.h:153
int32_t compressorname_[8]
Definition FileFormatMJ2.h:180
uint8_t same_sample_size_
Definition FileFormatMJ2.h:198
int32_t samples_rate_
Definition FileFormatMJ2.h:176
uint8_t fieldorder_
Definition FileFormatMJ2.h:183
int16_t layer_
Definition FileFormatMJ2.h:156
uint8_t or_fieldorder_
Definition FileFormatMJ2.h:185
int32_t slidingavgbitrate_
Definition FileFormatMJ2.h:164
int32_t handler_type_
Definition FileFormatMJ2.h:196
int32_t trans_matrix_[9]
Definition FileFormatMJ2.h:193
int16_t maxPDUsize_
Definition FileFormatMJ2.h:160
int32_t visual_h_
Definition FileFormatMJ2.h:173
int16_t balance_
Definition FileFormatMJ2.h:159
int16_t language_
Definition FileFormatMJ2.h:158
int32_t timescale_
Definition FileFormatMJ2.h:155
int32_t CbCr_subsampling_dy_
Definition FileFormatMJ2.h:175
int16_t opcolor_[3]
Definition FileFormatMJ2.h:166
std::vector< mj2_tts > tts_
Definition FileFormatMJ2.h:199
~mj2_tk()
Definition FileFormatMJ2.cpp:60
int32_t Dim_[2]
Definition FileFormatMJ2.h:169
uint32_t name_size_
Definition FileFormatMJ2.h:197
std::vector< mj2_url > url_
Definition FileFormatMJ2.h:167
uint8_t * jp2xdata_
Definition FileFormatMJ2.h:188
int32_t duration_
Definition FileFormatMJ2.h:154
uint8_t vsub_
Definition FileFormatMJ2.h:190
int32_t avgbitrate_
Definition FileFormatMJ2.h:163
int16_t avgPDUsize_
Definition FileFormatMJ2.h:161
mj2_tk()
Definition FileFormatMJ2.cpp:41
std::vector< mj2_sampletochunk > sampletochunk_
Definition FileFormatMJ2.h:201
int32_t track_type_
Definition FileFormatMJ2.h:151
int32_t maxbitrate_
Definition FileFormatMJ2.h:162
int16_t volume_
Definition FileFormatMJ2.h:157
uint32_t num_samples_
Definition FileFormatMJ2.h:194
uint8_t voff_
Definition FileFormatMJ2.h:192
int16_t depth_
Definition FileFormatMJ2.h:181
int16_t w_
Definition FileFormatMJ2.h:170
int16_t h_
Definition FileFormatMJ2.h:171
int32_t visual_w_
Definition FileFormatMJ2.h:172
uint8_t hsub_
Definition FileFormatMJ2.h:189
uint8_t fieldcount_
Definition FileFormatMJ2.h:182
std::string name_
Definition FileFormatMJ2.h:202
uint8_t num_jp2x_
Definition FileFormatMJ2.h:187
std::vector< mj2_urn > urn_
Definition FileFormatMJ2.h:168
uint32_t creation_time_
Definition FileFormatMJ2.h:152
std::vector< uint32_t > br_
Definition FileFormatMJ2.h:186
int32_t samples_description_
Definition FileFormatMJ2.h:177
mj2_tts()
Definition FileFormatMJ2.h:76
uint32_t samples_count_
Definition FileFormatMJ2.h:77
int32_t samples_delta_
Definition FileFormatMJ2.h:78
int32_t location_[4]
Definition FileFormatMJ2.h:124
mj2_url()
Definition FileFormatMJ2.h:119
int32_t location_[4]
Definition FileFormatMJ2.h:141
int32_t name_[2]
Definition FileFormatMJ2.h:140
mj2_urn()
Definition FileFormatMJ2.h:132