LIBJXL_DOC
encode.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_ENCODE_H_
14 #define JXL_ENCODE_H_
15 
16 #include <jxl/cms_interface.h>
17 #include <jxl/codestream_header.h>
18 #include <jxl/color_encoding.h>
19 #include <jxl/jxl_export.h>
20 #include <jxl/memory_manager.h>
21 #include <jxl/parallel_runner.h>
22 #include <jxl/stats.h>
23 #include <jxl/types.h>
24 #include <jxl/version.h> // TODO(eustas): remove before v1.0
25 #include <stddef.h>
26 #include <stdint.h>
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
39 JXL_EXPORT uint32_t JxlEncoderVersion(void);
40 
47 typedef struct JxlEncoder JxlEncoder;
48 
58 
62 typedef enum {
67 
71 
75 
77 
83 typedef enum {
87 
91 
96 
101 
105 
111 
117 
119 
126 typedef enum {
133 
139 
147 
154 
165 
172 
178 
183 
188 
193 
198 
204 
209 
215 
221 
226 
231 
237 
243 
249 
255 
261 
266 
271 
278 
287 
291 
298 
304 
312 
317 
328 
335 
342 
357 
366 
374 
381 
389 
394 
419 
424 
426 
439 JXL_EXPORT JxlEncoder* JxlEncoderCreate(const JxlMemoryManager* memory_manager);
440 
448 JXL_EXPORT void JxlEncoderReset(JxlEncoder* enc);
449 
455 JXL_EXPORT void JxlEncoderDestroy(JxlEncoder* enc);
456 
466 JXL_EXPORT void JxlEncoderSetCms(JxlEncoder* enc, JxlCmsInterface cms);
467 
480 JXL_EXPORT JxlEncoderStatus
482  void* parallel_runner_opaque);
483 
492 
524  uint8_t** next_out,
525  size_t* avail_out);
526 
561 JXL_EXPORT JxlEncoderStatus
563  const JxlFrameHeader* frame_header);
564 
577  JxlEncoderFrameSettings* frame_settings, size_t index,
578  const JxlBlendInfo* blend_info);
579 
601  JxlEncoderFrameSettings* frame_settings, const char* frame_name);
602 
619  JxlEncoderFrameSettings* frame_settings, const JxlBitDepth* bit_depth);
620 
651 JXL_EXPORT JxlEncoderStatus
652 JxlEncoderAddJPEGFrame(const JxlEncoderFrameSettings* frame_settings,
653  const uint8_t* buffer, size_t size);
654 
724  const JxlEncoderFrameSettings* frame_settings,
725  const JxlPixelFormat* pixel_format, const void* buffer, size_t size);
726 
762  void* opaque;
763 
781  void* (*get_buffer)(void* opaque, size_t* size);
782 
792  void (*release_buffer)(void* opaque, size_t written_bytes);
793 
804  void (*seek)(void* opaque, uint64_t position);
805 
817  void (*set_finalized_position)(void* opaque, uint64_t finalized_position);
818 };
819 
833  JxlEncoder* enc, struct JxlEncoderOutputProcessor output_processor);
834 
849 
859  void* opaque;
860 
874  JxlPixelFormat* pixel_format);
875 
899  const void* (*get_color_channel_data_at)(void* opaque, size_t xpos,
900  size_t ypos, size_t xsize,
901  size_t ysize, size_t* row_offset);
902 
916  void (*get_extra_channel_pixel_format)(void* opaque, size_t ec_index,
917  JxlPixelFormat* pixel_format);
918 
943  const void* (*get_extra_channel_data_at)(void* opaque, size_t ec_index,
944  size_t xpos, size_t ypos,
945  size_t xsize, size_t ysize,
946  size_t* row_offset);
947 
958  void (*release_buffer)(void* opaque, const void* buf);
959 };
960 
982  const JxlEncoderFrameSettings* frame_settings, JXL_BOOL is_last_frame,
983  struct JxlChunkedFrameInputSource chunked_frame_input);
984 
1009  const JxlEncoderFrameSettings* frame_settings,
1010  const JxlPixelFormat* pixel_format, const void* buffer, size_t size,
1011  uint32_t index);
1012 
1083  const JxlBoxType type,
1084  const uint8_t* contents,
1085  size_t size,
1086  JXL_BOOL compress_box);
1087 
1100 
1116 JXL_EXPORT void JxlEncoderCloseBoxes(JxlEncoder* enc);
1117 
1130 JXL_EXPORT void JxlEncoderCloseFrames(JxlEncoder* enc);
1131 
1146 JXL_EXPORT void JxlEncoderCloseInput(JxlEncoder* enc);
1147 
1161 JXL_EXPORT JxlEncoderStatus
1163 
1178  const uint8_t* icc_profile,
1179  size_t size);
1180 
1190 JXL_EXPORT void JxlEncoderInitBasicInfo(JxlBasicInfo* info);
1191 
1202 JXL_EXPORT void JxlEncoderInitFrameHeader(JxlFrameHeader* frame_header);
1203 
1211 JXL_EXPORT void JxlEncoderInitBlendInfo(JxlBlendInfo* blend_info);
1212 
1229  const JxlBasicInfo* info);
1230 
1248  int64_t factor,
1249  int64_t mode);
1250 
1262  JxlExtraChannelInfo* info);
1263 
1275  JxlEncoder* enc, size_t index, const JxlExtraChannelInfo* info);
1276 
1293  size_t index,
1294  const char* name,
1295  size_t size);
1296 
1313  JxlEncoderFrameSettings* frame_settings, JxlEncoderFrameSettingId option,
1314  int64_t value);
1315 
1332  JxlEncoderFrameSettings* frame_settings, JxlEncoderFrameSettingId option,
1333  float value);
1334 
1354  JXL_BOOL use_container);
1355 
1370 JXL_EXPORT JxlEncoderStatus
1371 JxlEncoderStoreJPEGMetadata(JxlEncoder* enc, JXL_BOOL store_jpeg_metadata);
1372 
1408  int level);
1409 
1430 JXL_EXPORT int JxlEncoderGetRequiredCodestreamLevel(const JxlEncoder* enc);
1431 
1451  JxlEncoderFrameSettings* frame_settings, JXL_BOOL lossless);
1452 
1468  JxlEncoderFrameSettings* frame_settings, float distance);
1469 
1485  JxlEncoderFrameSettings* frame_settings, size_t index, float distance);
1486 
1522 JXL_EXPORT float JxlEncoderDistanceFromQuality(float quality);
1523 
1542  JxlEncoder* enc, const JxlEncoderFrameSettings* source);
1543 
1550 JXL_EXPORT void JxlColorEncodingSetToSRGB(JxlColorEncoding* color_encoding,
1551  JXL_BOOL is_gray);
1552 
1559 JXL_EXPORT void JxlColorEncodingSetToLinearSRGB(
1560  JxlColorEncoding* color_encoding, JXL_BOOL is_gray);
1561 
1570 JXL_EXPORT void JxlEncoderAllowExpertOptions(JxlEncoder* enc);
1571 
1588 typedef void (*JxlDebugImageCallback)(void* opaque, const char* label,
1589  size_t xsize, size_t ysize,
1590  const JxlColorEncoding* color,
1591  const uint16_t* pixels);
1592 
1605 JXL_EXPORT void JxlEncoderSetDebugImageCallback(
1606  JxlEncoderFrameSettings* frame_settings, JxlDebugImageCallback callback,
1607  void* opaque);
1608 
1620 JXL_EXPORT void JxlEncoderCollectStats(JxlEncoderFrameSettings* frame_settings,
1621  JxlEncoderStats* stats);
1622 
1623 #ifdef __cplusplus
1624 }
1625 #endif
1626 
1627 #endif /* JXL_ENCODE_H_ */
1628 
Definition: encode.h:100
JXL_EXPORT JxlEncoderStatus JxlEncoderFlushInput(JxlEncoder *enc)
JxlEncoderError
Definition: encode.h:83
Definition: encode.h:214
Definition: encode.h:116
Interface to allow the injection of different color management systems (CMSes, also called color mana...
Definition: encode.h:365
#define JXL_BOOL
Definition: types.h:29
Data types for the JPEG XL API, for both encoding and decoding.
Definition: types.h:133
void * opaque
Definition: encode.h:762
JxlEncoderStatus
Definition: encode.h:62
Definition: encode.h:187
Definition: encode.h:334
Definition: encode.h:177
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelInfo(JxlEncoder *enc, size_t index, const JxlExtraChannelInfo *info)
Definition: color_encoding.h:114
Definition: encode.h:854
JXL_EXPORT void JxlEncoderReset(JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderAddJPEGFrame(const JxlEncoderFrameSettings *frame_settings, const uint8_t *buffer, size_t size)
Definition: cms_interface.h:227
JXL_EXPORT JxlEncoderStatus JxlEncoderUseBoxes(JxlEncoder *enc)
JXL_EXPORT void JxlEncoderAllowExpertOptions(JxlEncoder *enc)
JXL_EXPORT void JxlColorEncodingSetToLinearSRGB(JxlColorEncoding *color_encoding, JXL_BOOL is_gray)
Definition: encode.h:756
JXL_EXPORT JxlEncoder * JxlEncoderCreate(const JxlMemoryManager *memory_manager)
JXL_EXPORT void JxlEncoderSetCms(JxlEncoder *enc, JxlCmsInterface cms)
JXL_EXPORT void JxlEncoderInitFrameHeader(JxlFrameHeader *frame_header)
Color Encoding definitions used by JPEG XL. All CIE units are for the standard 1931 2 degree observer...
JXL_EXPORT JxlEncoderStatus JxlEncoderProcessOutput(JxlEncoder *enc, uint8_t **next_out, size_t *avail_out)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameLossless(JxlEncoderFrameSettings *frame_settings, JXL_BOOL lossless)
JXL_EXPORT JxlEncoderError JxlEncoderGetError(JxlEncoder *enc)
struct JxlEncoderFrameSettings JxlEncoderFrameSettings
Definition: encode.h:57
Definition: encode.h:182
Definition: encode.h:418
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameBitDepth(JxlEncoderFrameSettings *frame_settings, const JxlBitDepth *bit_depth)
Definition: encode.h:327
JXL_EXPORT void JxlEncoderInitExtraChannelInfo(JxlExtraChannelType type, JxlExtraChannelInfo *info)
Definition: encode.h:208
Definition: encode.h:265
void(* get_extra_channel_pixel_format)(void *opaque, size_t ec_index, JxlPixelFormat *pixel_format)
Definition: encode.h:916
JxlEncoderFrameSettingId
Definition: encode.h:126
void(* set_finalized_position)(void *opaque, uint64_t finalized_position)
Definition: encode.h:817
Definition: encode.h:230
JXL_EXPORT JxlEncoderStatus JxlEncoderAddBox(JxlEncoder *enc, const JxlBoxType type, const uint8_t *contents, size_t size, JXL_BOOL compress_box)
JXL_EXPORT uint32_t JxlEncoderVersion(void)
Definition: codestream_header.h:265
API to collect various statistics from JXL encoder.
Definition: encode.h:248
JXL_EXPORT JxlEncoderStatus JxlEncoderAddChunkedFrame(const JxlEncoderFrameSettings *frame_settings, JXL_BOOL is_last_frame, struct JxlChunkedFrameInputSource chunked_frame_input)
Adds a frame to the encoder using a chunked input source.
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelName(JxlEncoder *enc, size_t index, const char *name, size_t size)
JXL_EXPORT void JxlEncoderCloseFrames(JxlEncoder *enc)
Abstraction functions used by JPEG XL to allocate memory.
Definition: encode.h:86
void(* release_buffer)(void *opaque, const void *buf)
Definition: encode.h:958
Definition: encode.h:197
struct JxlEncoderStats JxlEncoderStats
Definition: stats.h:29
JxlExtraChannelType
Definition: codestream_header.h:44
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameHeader(JxlEncoderFrameSettings *frame_settings, const JxlFrameHeader *frame_header)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetColorEncoding(JxlEncoder *enc, const JxlColorEncoding *color)
void(* release_buffer)(void *opaque, size_t written_bytes)
Definition: encode.h:792
Definition: encode.h:70
JXL_EXPORT JxlEncoderStatus JxlEncoderSetUpsamplingMode(JxlEncoder *enc, int64_t factor, int64_t mode)
void(* get_color_channels_pixel_format)(void *opaque, JxlPixelFormat *pixel_format)
Definition: encode.h:873
Definition: encode.h:270
JXL_EXPORT JxlEncoderStatus JxlEncoderSetBasicInfo(JxlEncoder *enc, const JxlBasicInfo *info)
Definition: codestream_header.h:391
char JxlBoxType[4]
Definition: types.h:146
Definition: encode.h:192
Definition: encode.h:316
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelBuffer(const JxlEncoderFrameSettings *frame_settings, const JxlPixelFormat *pixel_format, const void *buffer, size_t size, uint32_t index)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetParallelRunner(JxlEncoder *enc, JxlParallelRunner parallel_runner, void *parallel_runner_opaque)
struct JxlEncoder JxlEncoder
Definition: encode.h:47
void * opaque
Definition: encode.h:859
Definition: codestream_header.h:330
Definition: encode.h:171
JXL_EXPORT JxlEncoderStatus JxlEncoderSetCodestreamLevel(JxlEncoder *enc, int level)
Definition: codestream_header.h:95
JXL_EXPORT JxlEncoderStatus JxlEncoderFrameSettingsSetOption(JxlEncoderFrameSettings *frame_settings, JxlEncoderFrameSettingId option, int64_t value)
JXL_EXPORT void JxlEncoderInitBlendInfo(JxlBlendInfo *blend_info)
JXL_EXPORT void JxlColorEncodingSetToSRGB(JxlColorEncoding *color_encoding, JXL_BOOL is_gray)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetICCProfile(JxlEncoder *enc, const uint8_t *icc_profile, size_t size)
Definition: memory_manager.h:51
Definition: encode.h:132
Definition: encode.h:373
Definition: encode.h:423
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameName(JxlEncoderFrameSettings *frame_settings, const char *frame_name)
JXL_EXPORT JxlEncoderFrameSettings * JxlEncoderFrameSettingsCreate(JxlEncoder *enc, const JxlEncoderFrameSettings *source)
JXL_EXPORT JxlEncoderStatus JxlEncoderUseContainer(JxlEncoder *enc, JXL_BOOL use_container)
Definition: encode.h:110
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelDistance(JxlEncoderFrameSettings *frame_settings, size_t index, float distance)
Definition: encode.h:356
JXL_EXPORT int JxlEncoderGetRequiredCodestreamLevel(const JxlEncoder *enc)
Definition: types.h:80
Definitions of structs and enums for the metadata from the JPEG XL codestream headers (signature...
Definition: encode.h:90
void(* JxlDebugImageCallback)(void *opaque, const char *label, size_t xsize, size_t ysize, const JxlColorEncoding *color, const uint16_t *pixels)
Definition: encode.h:1588
Definition: encode.h:146
JXL_EXPORT void JxlEncoderCollectStats(JxlEncoderFrameSettings *frame_settings, JxlEncoderStats *stats)
Definition: encode.h:74
JXL_EXPORT void JxlEncoderInitBasicInfo(JxlBasicInfo *info)
JXL_EXPORT void JxlEncoderCloseInput(JxlEncoder *enc)
JXL_EXPORT void JxlEncoderDestroy(JxlEncoder *enc)
void(* seek)(void *opaque, uint64_t position)
Definition: encode.h:804
JxlParallelRetCode(* JxlParallelRunner)(void *runner_opaque, void *jpegxl_opaque, JxlParallelRunInit init, JxlParallelRunFunction func, uint32_t start_range, uint32_t end_range)
Definition: parallel_runner.h:127
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameDistance(JxlEncoderFrameSettings *frame_settings, float distance)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetOutputProcessor(JxlEncoder *enc, struct JxlEncoderOutputProcessor output_processor)
JXL_EXPORT JxlEncoderStatus JxlEncoderAddImageFrame(const JxlEncoderFrameSettings *frame_settings, const JxlPixelFormat *pixel_format, const void *buffer, size_t size)
JXL_EXPORT float JxlEncoderDistanceFromQuality(float quality)
Definition: encode.h:203
JXL_EXPORT void JxlEncoderCloseBoxes(JxlEncoder *enc)
Definition: encode.h:66
Definition: encode.h:236
Definition: encode.h:138
JXL_EXPORT JxlEncoderStatus JxlEncoderStoreJPEGMetadata(JxlEncoder *enc, JXL_BOOL store_jpeg_metadata)
JXL_EXPORT void JxlEncoderSetDebugImageCallback(JxlEncoderFrameSettings *frame_settings, JxlDebugImageCallback callback, void *opaque)
Definition: encode.h:104
JXL_EXPORT JxlEncoderStatus JxlEncoderFrameSettingsSetFloatOption(JxlEncoderFrameSettings *frame_settings, JxlEncoderFrameSettingId option, float value)
Definition: encode.h:95
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelBlendInfo(JxlEncoderFrameSettings *frame_settings, size_t index, const JxlBlendInfo *blend_info)