LIBJXL

codestream_header.h
Go to the documentation of this file.
1/* Copyright (c) the JPEG XL Project Authors. All rights reserved.
2 *
3 * Use of this source code is governed by a BSD-style
4 * license that can be found in the LICENSE file.
5 */
6
13#ifndef JXL_CODESTREAM_HEADER_H_
14#define JXL_CODESTREAM_HEADER_H_
15
16#include <stddef.h>
17#include <stdint.h>
18
19#include "jxl/color_encoding.h"
20#include "jxl/types.h"
21
22#if defined(__cplusplus) || defined(c_plusplus)
23 extern "C" {
24#endif
25
31 typedef enum {
32 JXL_ORIENT_IDENTITY = 1,
33 JXL_ORIENT_FLIP_HORIZONTAL = 2,
34 JXL_ORIENT_ROTATE_180 = 3,
35 JXL_ORIENT_FLIP_VERTICAL = 4,
36 JXL_ORIENT_TRANSPOSE = 5,
37 JXL_ORIENT_ROTATE_90_CW = 6,
38 JXL_ORIENT_ANTI_TRANSPOSE = 7,
39 JXL_ORIENT_ROTATE_90_CCW = 8,
40} JxlOrientation;
41
44 typedef enum {
45 JXL_CHANNEL_ALPHA,
46 JXL_CHANNEL_DEPTH,
47 JXL_CHANNEL_SPOT_COLOR,
48 JXL_CHANNEL_SELECTION_MASK,
49 JXL_CHANNEL_BLACK,
50 JXL_CHANNEL_CFA,
51 JXL_CHANNEL_THERMAL,
52 JXL_CHANNEL_RESERVED0,
53 JXL_CHANNEL_RESERVED1,
54 JXL_CHANNEL_RESERVED2,
55 JXL_CHANNEL_RESERVED3,
56 JXL_CHANNEL_RESERVED4,
57 JXL_CHANNEL_RESERVED5,
58 JXL_CHANNEL_RESERVED6,
59 JXL_CHANNEL_RESERVED7,
60 JXL_CHANNEL_UNKNOWN,
61 JXL_CHANNEL_OPTIONAL
62} JxlExtraChannelType;
63
65 typedef struct {
67 uint32_t xsize;
68
70 uint32_t ysize;
71} JxlPreviewHeader;
72
77 typedef struct {
79 uint32_t tps_numerator;
80
82 uint32_t tps_denominator;
83
85 uint32_t num_loops;
86
89 JXL_BOOL have_timecodes;
90} JxlAnimationHeader;
91
95 typedef struct JxlBasicInfo {
96 /* TODO(lode): need additional fields for (transcoded) JPEG? For reusable
97 * fields orientation must be read from Exif APP1. For has_icc_profile: must
98 * look up where ICC profile is guaranteed to be in a JPEG file to be able to
99 * indicate this. */
100
101 /* TODO(lode): make struct packed, and/or make this opaque struct with getter
102 * functions (still separate struct from opaque decoder) */
103
108 JXL_BOOL have_container;
109
112 uint32_t xsize;
113
116 uint32_t ysize;
117
120 uint32_t bits_per_sample;
121
128 uint32_t exponent_bits_per_sample;
129
136 float intensity_target;
137
142 float min_nits;
143
146 JXL_BOOL relative_to_max_display;
147
153 float linear_below;
154
170 JXL_BOOL uses_original_profile;
171
175 JXL_BOOL have_preview;
176
180 JXL_BOOL have_animation;
181
185 JxlOrientation orientation;
186
194 uint32_t num_color_channels;
195
203 uint32_t num_extra_channels;
204
209 uint32_t alpha_bits;
210
215 uint32_t alpha_exponent_bits;
216
221 JXL_BOOL alpha_premultiplied;
222
226 JxlPreviewHeader preview;
227
231 JxlAnimationHeader animation;
232
236 uint8_t padding[108];
237} JxlBasicInfo;
238
241 typedef struct {
244 JxlExtraChannelType type;
245
248 uint32_t bits_per_sample;
249
253 uint32_t exponent_bits_per_sample;
254
260 uint32_t dim_shift;
261
265 uint32_t name_length;
266
270 JXL_BOOL alpha_premultiplied;
271
275 float spot_color[4];
276
280 uint32_t cfa_channel;
281} JxlExtraChannelInfo;
282
283/* TODO(lode): add API to get the codestream header extensions. */
285 typedef struct {
287 uint64_t extensions;
288} JxlHeaderExtensions;
289
291 typedef struct {
295 uint32_t duration;
296
305 uint32_t timecode;
306
310 uint32_t name_length;
311
314 JXL_BOOL is_last;
315} JxlFrameHeader;
316
317#if defined(__cplusplus) || defined(c_plusplus)
318}
319#endif
320
321#endif /* JXL_CODESTREAM_HEADER_H_ */
JxlBasicInfo
struct JxlBasicInfo JxlBasicInfo
JxlExtraChannelType
JxlExtraChannelType
Definition: codestream_header.h:44
JxlOrientation
JxlOrientation
Definition: codestream_header.h:31
color_encoding.h
Color Encoding definitions used by JPEG XL. All CIE units are for the standard 1931 2 degree observer...
JxlAnimationHeader
Definition: codestream_header.h:77
JxlAnimationHeader::have_timecodes
JXL_BOOL have_timecodes
Definition: codestream_header.h:89
JxlAnimationHeader::tps_denominator
uint32_t tps_denominator
Definition: codestream_header.h:82
JxlAnimationHeader::num_loops
uint32_t num_loops
Definition: codestream_header.h:85
JxlAnimationHeader::tps_numerator
uint32_t tps_numerator
Definition: codestream_header.h:79
JxlBasicInfo
Definition: codestream_header.h:95
JxlBasicInfo::uses_original_profile
JXL_BOOL uses_original_profile
Definition: codestream_header.h:170
JxlBasicInfo::alpha_bits
uint32_t alpha_bits
Definition: codestream_header.h:209
JxlBasicInfo::ysize
uint32_t ysize
Definition: codestream_header.h:116
JxlBasicInfo::padding
uint8_t padding[108]
Definition: codestream_header.h:236
JxlBasicInfo::min_nits
float min_nits
Definition: codestream_header.h:142
JxlBasicInfo::alpha_premultiplied
JXL_BOOL alpha_premultiplied
Definition: codestream_header.h:221
JxlBasicInfo::relative_to_max_display
JXL_BOOL relative_to_max_display
Definition: codestream_header.h:146
JxlBasicInfo::have_animation
JXL_BOOL have_animation
Definition: codestream_header.h:180
JxlBasicInfo::orientation
JxlOrientation orientation
Definition: codestream_header.h:185
JxlBasicInfo::alpha_exponent_bits
uint32_t alpha_exponent_bits
Definition: codestream_header.h:215
JxlBasicInfo::bits_per_sample
uint32_t bits_per_sample
Definition: codestream_header.h:120
JxlBasicInfo::exponent_bits_per_sample
uint32_t exponent_bits_per_sample
Definition: codestream_header.h:128
JxlBasicInfo::num_color_channels
uint32_t num_color_channels
Definition: codestream_header.h:194
JxlBasicInfo::xsize
uint32_t xsize
Definition: codestream_header.h:112
JxlBasicInfo::num_extra_channels
uint32_t num_extra_channels
Definition: codestream_header.h:203
JxlBasicInfo::have_preview
JXL_BOOL have_preview
Definition: codestream_header.h:175
JxlBasicInfo::preview
JxlPreviewHeader preview
Definition: codestream_header.h:226
JxlBasicInfo::linear_below
float linear_below
Definition: codestream_header.h:153
JxlBasicInfo::animation
JxlAnimationHeader animation
Definition: codestream_header.h:231
JxlBasicInfo::have_container
JXL_BOOL have_container
Definition: codestream_header.h:108
JxlBasicInfo::intensity_target
float intensity_target
Definition: codestream_header.h:136
JxlExtraChannelInfo
Definition: codestream_header.h:241
JxlExtraChannelInfo::type
JxlExtraChannelType type
Definition: codestream_header.h:244
JxlExtraChannelInfo::cfa_channel
uint32_t cfa_channel
Definition: codestream_header.h:280
JxlExtraChannelInfo::bits_per_sample
uint32_t bits_per_sample
Definition: codestream_header.h:248
JxlExtraChannelInfo::dim_shift
uint32_t dim_shift
Definition: codestream_header.h:260
JxlExtraChannelInfo::name_length
uint32_t name_length
Definition: codestream_header.h:265
JxlExtraChannelInfo::exponent_bits_per_sample
uint32_t exponent_bits_per_sample
Definition: codestream_header.h:253
JxlExtraChannelInfo::alpha_premultiplied
JXL_BOOL alpha_premultiplied
Definition: codestream_header.h:270
JxlFrameHeader
Definition: codestream_header.h:291
JxlFrameHeader::is_last
JXL_BOOL is_last
Definition: codestream_header.h:314
JxlFrameHeader::name_length
uint32_t name_length
Definition: codestream_header.h:310
JxlFrameHeader::duration
uint32_t duration
Definition: codestream_header.h:295
JxlFrameHeader::timecode
uint32_t timecode
Definition: codestream_header.h:305
JxlHeaderExtensions
Definition: codestream_header.h:285
JxlHeaderExtensions::extensions
uint64_t extensions
Definition: codestream_header.h:287
JxlPreviewHeader
Definition: codestream_header.h:65
JxlPreviewHeader::xsize
uint32_t xsize
Definition: codestream_header.h:67
JxlPreviewHeader::ysize
uint32_t ysize
Definition: codestream_header.h:70
types.h
Data types for the JPEG XL API, for both encoding and decoding.
JXL_BOOL
#define JXL_BOOL
Definition: types.h:27