LIBJXL
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/jxl_export.h"
19 #include "jxl/memory_manager.h"
20 #include "jxl/parallel_runner.h"
21 
22 #if defined(__cplusplus) || defined(c_plusplus)
23 extern "C" {
24 #endif
25 
33 JXL_EXPORT uint32_t JxlEncoderVersion(void);
34 
41 typedef struct JxlEncoderStruct JxlEncoder;
42 
51 typedef struct JxlEncoderFrameSettingsStruct JxlEncoderFrameSettings;
52 
56 
60 typedef enum {
65 
69 
73 
80 
82 
88 typedef enum {
92 
96 
101 
106 
110 
116 
122 
124 
131 typedef enum {
138 
144 
152 
159 
170 
177 
183 
188 
193 
198 
203 
209 
214 
220 
226 
231 
236 
242 
248 
254 
260 
266 
271 
276 
283 
292 
296 
303 
309 
317 
322 
333 
340 
345 
347 
360 JXL_EXPORT JxlEncoder* JxlEncoderCreate(const JxlMemoryManager* memory_manager);
361 
369 JXL_EXPORT void JxlEncoderReset(JxlEncoder* enc);
370 
376 JXL_EXPORT void JxlEncoderDestroy(JxlEncoder* enc);
377 
387 JXL_EXPORT void JxlEncoderSetCms(JxlEncoder* enc, JxlCmsInterface cms);
388 
401 JXL_EXPORT JxlEncoderStatus
403  void* parallel_runner_opaque);
404 
413 
440  uint8_t** next_out,
441  size_t* avail_out);
442 
476 JXL_EXPORT JxlEncoderStatus
478  const JxlFrameHeader* frame_header);
479 
492  JxlEncoderFrameSettings* frame_settings, size_t index,
493  const JxlBlendInfo* blend_info);
494 
515  JxlEncoderFrameSettings* frame_settings, const char* frame_name);
516 
543 JXL_EXPORT JxlEncoderStatus
545  const uint8_t* buffer, size_t size);
546 
605  const JxlEncoderFrameSettings* frame_settings,
606  const JxlPixelFormat* pixel_format, const void* buffer, size_t size);
607 
632  const JxlEncoderFrameSettings* frame_settings,
633  const JxlPixelFormat* pixel_format, const void* buffer, size_t size,
634  uint32_t index);
635 
705  const JxlBoxType type,
706  const uint8_t* contents,
707  size_t size,
708  JXL_BOOL compress_box);
709 
722 
738 JXL_EXPORT void JxlEncoderCloseBoxes(JxlEncoder* enc);
739 
752 JXL_EXPORT void JxlEncoderCloseFrames(JxlEncoder* enc);
753 
768 JXL_EXPORT void JxlEncoderCloseInput(JxlEncoder* enc);
769 
783 JXL_EXPORT JxlEncoderStatus
785 
800  const uint8_t* icc_profile,
801  size_t size);
802 
812 JXL_EXPORT void JxlEncoderInitBasicInfo(JxlBasicInfo* info);
813 
824 JXL_EXPORT void JxlEncoderInitFrameHeader(JxlFrameHeader* frame_header);
825 
833 JXL_EXPORT void JxlEncoderInitBlendInfo(JxlBlendInfo* blend_info);
834 
851  const JxlBasicInfo* info);
852 
864  JxlExtraChannelInfo* info);
865 
877  JxlEncoder* enc, size_t index, const JxlExtraChannelInfo* info);
878 
894  size_t index,
895  const char* name,
896  size_t size);
897 
913  JxlEncoderFrameSettings* frame_settings, JxlEncoderFrameSettingId option,
914  int64_t value);
915 
931  JxlEncoderFrameSettings* frame_settings, JxlEncoderFrameSettingId option,
932  float value);
933 
953  JXL_BOOL use_container);
954 
969 JXL_EXPORT JxlEncoderStatus
971 
1007  int level);
1008 
1029 
1049  JxlEncoderFrameSettings* frame_settings, JXL_BOOL lossless);
1050 
1053 JXL_EXPORT JxlEncoderStatus
1055 
1066 JXL_EXPORT JXL_DEPRECATED JxlEncoderStatus
1068 
1080  JxlEncoderFrameSettings* frame_settings, int tier);
1081 
1097  JxlEncoderFrameSettings* frame_settings, float distance);
1098 
1101 JXL_EXPORT JXL_DEPRECATED JxlEncoderStatus
1103 
1120  JxlEncoder* enc, const JxlEncoderFrameSettings* source);
1121 
1126 
1133 JXL_EXPORT void JxlColorEncodingSetToSRGB(JxlColorEncoding* color_encoding,
1134  JXL_BOOL is_gray);
1135 
1143  JxlColorEncoding* color_encoding, JXL_BOOL is_gray);
1144 
1145 #if defined(__cplusplus) || defined(c_plusplus)
1146 }
1147 #endif
1148 
1149 #endif /* JXL_ENCODE_H_ */
1150 
JxlEncoderSetExtraChannelInfo
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelInfo(JxlEncoder *enc, size_t index, const JxlExtraChannelInfo *info)
JXL_ENC_FRAME_SETTING_CHANNEL_COLORS_GLOBAL_PERCENT
@ JXL_ENC_FRAME_SETTING_CHANNEL_COLORS_GLOBAL_PERCENT
Definition: encode.h:259
JxlEncoderOptionsSetEffort
JXL_EXPORT JXL_DEPRECATED JxlEncoderStatus JxlEncoderOptionsSetEffort(JxlEncoderFrameSettings *frame_settings, int effort)
JXL_ENC_FRAME_SETTING_RESPONSIVE
@ JXL_ENC_FRAME_SETTING_RESPONSIVE
Definition: encode.h:235
JXL_ENC_FRAME_SETTING_MODULAR_MA_TREE_LEARNING_PERCENT
@ JXL_ENC_FRAME_SETTING_MODULAR_MA_TREE_LEARNING_PERCENT
Definition: encode.h:308
JXL_ENC_FRAME_SETTING_PATCHES
@ JXL_ENC_FRAME_SETTING_PATCHES
Definition: encode.h:192
JXL_ENC_FRAME_SETTING_BROTLI_EFFORT
@ JXL_ENC_FRAME_SETTING_BROTLI_EFFORT
Definition: encode.h:339
JxlEncoderUseContainer
JXL_EXPORT JxlEncoderStatus JxlEncoderUseContainer(JxlEncoder *enc, JXL_BOOL use_container)
JXL_ENC_FRAME_SETTING_DOTS
@ JXL_ENC_FRAME_SETTING_DOTS
Definition: encode.h:187
JxlEncoderSetCms
JXL_EXPORT void JxlEncoderSetCms(JxlEncoder *enc, JxlCmsInterface cms)
JXL_BOOL
#define JXL_BOOL
Definition: types.h:31
JXL_ENC_FRAME_SETTING_PALETTE_COLORS
@ JXL_ENC_FRAME_SETTING_PALETTE_COLORS
Definition: encode.h:270
JXL_ENC_ERR_OOM
@ JXL_ENC_ERR_OOM
Definition: encode.h:100
cms_interface.h
Interface to allow the injection of different color management systems (CMSes, also called color mana...
JXL_ENC_FRAME_SETTING_EXTRA_CHANNEL_RESAMPLING
@ JXL_ENC_FRAME_SETTING_EXTRA_CHANNEL_RESAMPLING
Definition: encode.h:158
JXL_ENC_FRAME_SETTING_MODULAR
@ JXL_ENC_FRAME_SETTING_MODULAR
Definition: encode.h:208
JXL_ENC_FRAME_SETTING_GROUP_ORDER_CENTER_X
@ JXL_ENC_FRAME_SETTING_GROUP_ORDER_CENTER_X
Definition: encode.h:225
JxlColorEncodingSetToLinearSRGB
JXL_EXPORT void JxlColorEncodingSetToLinearSRGB(JxlColorEncoding *color_encoding, JXL_BOOL is_gray)
JXL_ENC_FRAME_SETTING_PROGRESSIVE_AC
@ JXL_ENC_FRAME_SETTING_PROGRESSIVE_AC
Definition: encode.h:241
JxlEncoderAddJPEGFrame
JXL_EXPORT JxlEncoderStatus JxlEncoderAddJPEGFrame(const JxlEncoderFrameSettings *frame_settings, const uint8_t *buffer, size_t size)
JXL_ENC_FRAME_SETTING_CHANNEL_COLORS_GROUP_PERCENT
@ JXL_ENC_FRAME_SETTING_CHANNEL_COLORS_GROUP_PERCENT
Definition: encode.h:265
JXL_ENC_ERR_BAD_INPUT
@ JXL_ENC_ERR_BAD_INPUT
Definition: encode.h:109
codestream_header.h
Definitions of structs and enums for the metadata from the JPEG XL codestream headers (signature,...
JxlEncoderInitFrameHeader
JXL_EXPORT void JxlEncoderInitFrameHeader(JxlFrameHeader *frame_header)
JxlEncoderOptionsSetDistance
JXL_EXPORT JXL_DEPRECATED JxlEncoderStatus JxlEncoderOptionsSetDistance(JxlEncoderFrameSettings *, float)
JxlColorEncodingSetToSRGB
JXL_EXPORT void JxlColorEncodingSetToSRGB(JxlColorEncoding *color_encoding, JXL_BOOL is_gray)
JxlEncoderAddImageFrame
JXL_EXPORT JxlEncoderStatus JxlEncoderAddImageFrame(const JxlEncoderFrameSettings *frame_settings, const JxlPixelFormat *pixel_format, const void *buffer, size_t size)
JxlEncoderOptionsCreate
JXL_EXPORT JXL_DEPRECATED JxlEncoderFrameSettings * JxlEncoderOptionsCreate(JxlEncoder *, const JxlEncoderFrameSettings *)
JxlEncoderInitBlendInfo
JXL_EXPORT void JxlEncoderInitBlendInfo(JxlBlendInfo *blend_info)
JXL_ENC_FRAME_SETTING_MODULAR_GROUP_SIZE
@ JXL_ENC_FRAME_SETTING_MODULAR_GROUP_SIZE
Definition: encode.h:295
JXL_ENC_ERR_API_USAGE
@ JXL_ENC_ERR_API_USAGE
Definition: encode.h:121
JxlEncoderCloseBoxes
JXL_EXPORT void JxlEncoderCloseBoxes(JxlEncoder *enc)
JxlEncoderFrameSettingsSetFloatOption
JXL_EXPORT JxlEncoderStatus JxlEncoderFrameSettingsSetFloatOption(JxlEncoderFrameSettings *frame_settings, JxlEncoderFrameSettingId option, float value)
JXL_ENC_FRAME_SETTING_JPEG_RECON_CFL
@ JXL_ENC_FRAME_SETTING_JPEG_RECON_CFL
Definition: encode.h:321
JXL_ENC_FRAME_INDEX_BOX
@ JXL_ENC_FRAME_INDEX_BOX
Definition: encode.h:332
JxlEncoderSetFrameName
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameName(JxlEncoderFrameSettings *frame_settings, const char *frame_name)
JXL_ENC_ERR_OK
@ JXL_ENC_ERR_OK
Definition: encode.h:91
JxlEncoderSetFrameHeader
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameHeader(JxlEncoderFrameSettings *frame_settings, const JxlFrameHeader *frame_header)
JXL_ENC_FRAME_SETTING_GROUP_ORDER_CENTER_Y
@ JXL_ENC_FRAME_SETTING_GROUP_ORDER_CENTER_Y
Definition: encode.h:230
JXL_ENC_FRAME_SETTING_NOISE
@ JXL_ENC_FRAME_SETTING_NOISE
Definition: encode.h:182
JXL_ENC_FRAME_SETTING_ALREADY_DOWNSAMPLED
@ JXL_ENC_FRAME_SETTING_ALREADY_DOWNSAMPLED
Definition: encode.h:169
JXL_ENC_FRAME_SETTING_GABORISH
@ JXL_ENC_FRAME_SETTING_GABORISH
Definition: encode.h:202
JXL_ENC_FRAME_SETTING_PROGRESSIVE_DC
@ JXL_ENC_FRAME_SETTING_PROGRESSIVE_DC
Definition: encode.h:253
JxlEncoderError
JxlEncoderError
Definition: encode.h:88
JxlEncoderSetExtraChannelName
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelName(JxlEncoder *enc, size_t index, const char *name, size_t size)
JxlExtraChannelInfo
Definition: codestream_header.h:273
JxlEncoderOptionsSetDecodingSpeed
JXL_EXPORT JXL_DEPRECATED JxlEncoderStatus JxlEncoderOptionsSetDecodingSpeed(JxlEncoderFrameSettings *frame_settings, int tier)
JXL_ENC_FRAME_SETTING_KEEP_INVISIBLE
@ JXL_ENC_FRAME_SETTING_KEEP_INVISIBLE
Definition: encode.h:213
JXL_ENC_FRAME_SETTING_MODULAR_PREDICTOR
@ JXL_ENC_FRAME_SETTING_MODULAR_PREDICTOR
Definition: encode.h:302
JxlFrameHeader
Definition: codestream_header.h:397
JxlBlendInfo
Definition: codestream_header.h:338
JXL_ENC_FRAME_SETTING_LOSSY_PALETTE
@ JXL_ENC_FRAME_SETTING_LOSSY_PALETTE
Definition: encode.h:275
JxlEncoderSetParallelRunner
JXL_EXPORT JxlEncoderStatus JxlEncoderSetParallelRunner(JxlEncoder *enc, JxlParallelRunner parallel_runner, void *parallel_runner_opaque)
JXL_ENC_FRAME_SETTING_EFFORT
@ JXL_ENC_FRAME_SETTING_EFFORT
Definition: encode.h:137
JxlEncoderCloseFrames
JXL_EXPORT void JxlEncoderCloseFrames(JxlEncoder *enc)
JXL_ENC_FRAME_SETTING_QPROGRESSIVE_AC
@ JXL_ENC_FRAME_SETTING_QPROGRESSIVE_AC
Definition: encode.h:247
JxlEncoderSetColorEncoding
JXL_EXPORT JxlEncoderStatus JxlEncoderSetColorEncoding(JxlEncoder *enc, const JxlColorEncoding *color)
JxlEncoderSetBasicInfo
JXL_EXPORT JxlEncoderStatus JxlEncoderSetBasicInfo(JxlEncoder *enc, const JxlBasicInfo *info)
JxlEncoderStatus
JxlEncoderStatus
Definition: encode.h:60
JxlEncoderOptionsSetLossless
JXL_EXPORT JxlEncoderStatus JxlEncoderOptionsSetLossless(JxlEncoderFrameSettings *, JXL_BOOL)
JXL_ENC_NOT_SUPPORTED
@ JXL_ENC_NOT_SUPPORTED
Definition: encode.h:79
JxlEncoderSetCodestreamLevel
JXL_EXPORT JxlEncoderStatus JxlEncoderSetCodestreamLevel(JxlEncoder *enc, int level)
JXL_ENC_FRAME_SETTING_EPF
@ JXL_ENC_FRAME_SETTING_EPF
Definition: encode.h:197
JxlEncoderSetExtraChannelBlendInfo
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelBlendInfo(JxlEncoderFrameSettings *frame_settings, size_t index, const JxlBlendInfo *blend_info)
JxlColorEncoding
Definition: color_encoding.h:116
JxlBoxType
char JxlBoxType[4]
Definition: types.h:116
JxlEncoderInitExtraChannelInfo
JXL_EXPORT void JxlEncoderInitExtraChannelInfo(JxlExtraChannelType type, JxlExtraChannelInfo *info)
JXL_ENC_FRAME_SETTING_MODULAR_COLOR_SPACE
@ JXL_ENC_FRAME_SETTING_MODULAR_COLOR_SPACE
Definition: encode.h:291
JXL_ENC_FRAME_SETTING_FILL_ENUM
@ JXL_ENC_FRAME_SETTING_FILL_ENUM
Definition: encode.h:344
JXL_ENC_ERROR
@ JXL_ENC_ERROR
Definition: encode.h:68
JXL_ENC_FRAME_SETTING_PHOTON_NOISE
@ JXL_ENC_FRAME_SETTING_PHOTON_NOISE
Definition: encode.h:176
JxlEncoderFrameSettingsSetOption
JXL_EXPORT JxlEncoderStatus JxlEncoderFrameSettingsSetOption(JxlEncoderFrameSettings *frame_settings, JxlEncoderFrameSettingId option, int64_t value)
JxlEncoder
struct JxlEncoderStruct JxlEncoder
Definition: encode.h:41
JxlEncoderFrameSettingId
JxlEncoderFrameSettingId
Definition: encode.h:131
memory_manager.h
Abstraction functions used by JPEG XL to allocate memory.
JxlEncoderSetICCProfile
JXL_EXPORT JxlEncoderStatus JxlEncoderSetICCProfile(JxlEncoder *enc, const uint8_t *icc_profile, size_t size)
JXL_ENC_FRAME_SETTING_MODULAR_NB_PREV_CHANNELS
@ JXL_ENC_FRAME_SETTING_MODULAR_NB_PREV_CHANNELS
Definition: encode.h:316
JxlEncoderUseBoxes
JXL_EXPORT JxlEncoderStatus JxlEncoderUseBoxes(JxlEncoder *enc)
JXL_ENC_SUCCESS
@ JXL_ENC_SUCCESS
Definition: encode.h:64
JxlEncoderFrameSettingsCreate
JXL_EXPORT JxlEncoderFrameSettings * JxlEncoderFrameSettingsCreate(JxlEncoder *enc, const JxlEncoderFrameSettings *source)
JxlMemoryManagerStruct
Definition: memory_manager.h:51
JxlParallelRunner
JxlParallelRetCode(* JxlParallelRunner)(void *runner_opaque, void *jpegxl_opaque, JxlParallelRunInit init, JxlParallelRunFunction func, uint32_t start_range, uint32_t end_range)
Definition: parallel_runner.h:119
JxlEncoderOptions
JxlEncoderFrameSettings JxlEncoderOptions
Definition: encode.h:55
JXL_ENC_NEED_MORE_OUTPUT
@ JXL_ENC_NEED_MORE_OUTPUT
Definition: encode.h:72
JxlEncoderSetFrameDistance
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameDistance(JxlEncoderFrameSettings *frame_settings, float distance)
JxlEncoderReset
JXL_EXPORT void JxlEncoderReset(JxlEncoder *enc)
JxlBasicInfo
Definition: codestream_header.h:105
JxlEncoderFrameSettings
struct JxlEncoderFrameSettingsStruct JxlEncoderFrameSettings
Definition: encode.h:51
JxlPixelFormat
Definition: types.h:87
JXL_ENC_FRAME_SETTING_GROUP_ORDER
@ JXL_ENC_FRAME_SETTING_GROUP_ORDER
Definition: encode.h:219
JXL_ENC_FRAME_SETTING_COLOR_TRANSFORM
@ JXL_ENC_FRAME_SETTING_COLOR_TRANSFORM
Definition: encode.h:282
JxlEncoderGetRequiredCodestreamLevel
JXL_EXPORT int JxlEncoderGetRequiredCodestreamLevel(const JxlEncoder *enc)
JxlEncoderSetFrameLossless
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameLossless(JxlEncoderFrameSettings *frame_settings, JXL_BOOL lossless)
JxlEncoderCloseInput
JXL_EXPORT void JxlEncoderCloseInput(JxlEncoder *enc)
JxlEncoderGetError
JXL_EXPORT JxlEncoderError JxlEncoderGetError(JxlEncoder *enc)
JxlEncoderStoreJPEGMetadata
JXL_EXPORT JxlEncoderStatus JxlEncoderStoreJPEGMetadata(JxlEncoder *enc, JXL_BOOL store_jpeg_metadata)
JXL_ENC_FRAME_SETTING_RESAMPLING
@ JXL_ENC_FRAME_SETTING_RESAMPLING
Definition: encode.h:151
JxlEncoderCreate
JXL_EXPORT JxlEncoder * JxlEncoderCreate(const JxlMemoryManager *memory_manager)
JxlEncoderAddBox
JXL_EXPORT JxlEncoderStatus JxlEncoderAddBox(JxlEncoder *enc, const JxlBoxType type, const uint8_t *contents, size_t size, JXL_BOOL compress_box)
JxlEncoderVersion
JXL_EXPORT uint32_t JxlEncoderVersion(void)
parallel_runner.h
JxlEncoderDestroy
JXL_EXPORT void JxlEncoderDestroy(JxlEncoder *enc)
JxlEncoderProcessOutput
JXL_EXPORT JxlEncoderStatus JxlEncoderProcessOutput(JxlEncoder *enc, uint8_t **next_out, size_t *avail_out)
JxlEncoderInitBasicInfo
JXL_EXPORT void JxlEncoderInitBasicInfo(JxlBasicInfo *info)
JXL_ENC_ERR_GENERIC
@ JXL_ENC_ERR_GENERIC
Definition: encode.h:95
JxlEncoderSetExtraChannelBuffer
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelBuffer(const JxlEncoderFrameSettings *frame_settings, const JxlPixelFormat *pixel_format, const void *buffer, size_t size, uint32_t index)
JXL_ENC_FRAME_SETTING_DECODING_SPEED
@ JXL_ENC_FRAME_SETTING_DECODING_SPEED
Definition: encode.h:143
JxlExtraChannelType
JxlExtraChannelType
Definition: codestream_header.h:45
JxlCmsInterface
Definition: cms_interface.h:209
JXL_ENC_ERR_NOT_SUPPORTED
@ JXL_ENC_ERR_NOT_SUPPORTED
Definition: encode.h:115
JXL_ENC_ERR_JBRD
@ JXL_ENC_ERR_JBRD
Definition: encode.h:105