LIBJXL_DOC
Loading...
Searching...
No Matches
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
12
13#ifndef JXL_ENCODE_H_
14#define JXL_ENCODE_H_
15
16#include <jxl/cms_interface.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
29extern "C" {
30#endif
31
39JXL_EXPORT uint32_t JxlEncoderVersion(void);
40
47typedef struct JxlEncoder JxlEncoder;
48
58
77
119
126typedef 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
358
367
375
382
390
395
420
435
440
445
447
460JXL_EXPORT JxlEncoder* JxlEncoderCreate(const JxlMemoryManager* memory_manager);
461
469JXL_EXPORT void JxlEncoderReset(JxlEncoder* enc);
470
476JXL_EXPORT void JxlEncoderDestroy(JxlEncoder* enc);
477
487JXL_EXPORT void JxlEncoderSetCms(JxlEncoder* enc, JxlCmsInterface cms);
488
501JXL_EXPORT JxlEncoderStatus
503 void* parallel_runner_opaque);
504
513
545 uint8_t** next_out,
546 size_t* avail_out);
547
582JXL_EXPORT JxlEncoderStatus
584 const JxlFrameHeader* frame_header);
585
598 JxlEncoderFrameSettings* frame_settings, size_t index,
599 const JxlBlendInfo* blend_info);
600
622 JxlEncoderFrameSettings* frame_settings, const char* frame_name);
623
640 JxlEncoderFrameSettings* frame_settings, const JxlBitDepth* bit_depth);
641
672JXL_EXPORT JxlEncoderStatus
674 const uint8_t* buffer, size_t size);
675
745 const JxlEncoderFrameSettings* frame_settings,
746 const JxlPixelFormat* pixel_format, const void* buffer, size_t size);
747
783 void* opaque;
784
802 void* (*get_buffer)(void* opaque, size_t* size);
803
813 void (*release_buffer)(void* opaque, size_t written_bytes);
814
825 void (*seek)(void* opaque, uint64_t position);
826
838 void (*set_finalized_position)(void* opaque, uint64_t finalized_position);
839};
840
854 JxlEncoder* enc, struct JxlEncoderOutputProcessor output_processor);
855
870
880 void* opaque;
881
895 JxlPixelFormat* pixel_format);
896
920 const void* (*get_color_channel_data_at)(void* opaque, size_t xpos,
921 size_t ypos, size_t xsize,
922 size_t ysize, size_t* row_offset);
923
937 void (*get_extra_channel_pixel_format)(void* opaque, size_t ec_index,
938 JxlPixelFormat* pixel_format);
939
964 const void* (*get_extra_channel_data_at)(void* opaque, size_t ec_index,
965 size_t xpos, size_t ypos,
966 size_t xsize, size_t ysize,
967 size_t* row_offset);
968
979 void (*release_buffer)(void* opaque, const void* buf);
980};
981
1003 const JxlEncoderFrameSettings* frame_settings, JXL_BOOL is_last_frame,
1004 struct JxlChunkedFrameInputSource chunked_frame_input);
1005
1030 const JxlEncoderFrameSettings* frame_settings,
1031 const JxlPixelFormat* pixel_format, const void* buffer, size_t size,
1032 uint32_t index);
1033
1104 const JxlBoxType type,
1105 const uint8_t* contents,
1106 size_t size,
1107 JXL_BOOL compress_box);
1108
1121
1137JXL_EXPORT void JxlEncoderCloseBoxes(JxlEncoder* enc);
1138
1151JXL_EXPORT void JxlEncoderCloseFrames(JxlEncoder* enc);
1152
1167JXL_EXPORT void JxlEncoderCloseInput(JxlEncoder* enc);
1168
1182JXL_EXPORT JxlEncoderStatus
1184
1199 const uint8_t* icc_profile,
1200 size_t size);
1201
1212
1223JXL_EXPORT void JxlEncoderInitFrameHeader(JxlFrameHeader* frame_header);
1224
1232JXL_EXPORT void JxlEncoderInitBlendInfo(JxlBlendInfo* blend_info);
1233
1250 const JxlBasicInfo* info);
1251
1269 int64_t factor,
1270 int64_t mode);
1271
1283 JxlExtraChannelInfo* info);
1284
1296 JxlEncoder* enc, size_t index, const JxlExtraChannelInfo* info);
1297
1314 size_t index,
1315 const char* name,
1316 size_t size);
1317
1334 JxlEncoderFrameSettings* frame_settings, JxlEncoderFrameSettingId option,
1335 int64_t value);
1336
1353 JxlEncoderFrameSettings* frame_settings, JxlEncoderFrameSettingId option,
1354 float value);
1355
1375 JXL_BOOL use_container);
1376
1391JXL_EXPORT JxlEncoderStatus
1393
1429 int level);
1430
1452
1472 JxlEncoderFrameSettings* frame_settings, JXL_BOOL lossless);
1473
1489 JxlEncoderFrameSettings* frame_settings, float distance);
1490
1506 JxlEncoderFrameSettings* frame_settings, size_t index, float distance);
1507
1543JXL_EXPORT float JxlEncoderDistanceFromQuality(float quality);
1544
1563 JxlEncoder* enc, const JxlEncoderFrameSettings* source);
1564
1571JXL_EXPORT void JxlColorEncodingSetToSRGB(JxlColorEncoding* color_encoding,
1572 JXL_BOOL is_gray);
1573
1581 JxlColorEncoding* color_encoding, JXL_BOOL is_gray);
1582
1592
1609typedef void (*JxlDebugImageCallback)(void* opaque, const char* label,
1610 size_t xsize, size_t ysize,
1611 const JxlColorEncoding* color,
1612 const uint16_t* pixels);
1613
1627 JxlEncoderFrameSettings* frame_settings, JxlDebugImageCallback callback,
1628 void* opaque);
1629
1641JXL_EXPORT void JxlEncoderCollectStats(JxlEncoderFrameSettings* frame_settings,
1642 JxlEncoderStats* stats);
1643
1644#ifdef __cplusplus
1645}
1646#endif
1647
1648#endif /* JXL_ENCODE_H_ */
1649
Interface to allow the injection of different color management systems (CMSes, also called color mana...
Definitions of structs and enums for the metadata from the JPEG XL codestream headers (signature,...
Color Encoding definitions used by JPEG XL. All CIE units are for the standard 1931 2 degree observer...
struct JxlMemoryManagerStruct JxlMemoryManager
char JxlBoxType[4]
Definition types.h:146
#define JXL_BOOL
Definition types.h:29
JXL_EXPORT int JxlEncoderGetRequiredCodestreamLevel(const JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetCodestreamLevel(JxlEncoder *enc, int level)
JXL_EXPORT JxlEncoderStatus JxlEncoderAddJPEGFrame(const JxlEncoderFrameSettings *frame_settings, const uint8_t *buffer, size_t size)
void(* JxlDebugImageCallback)(void *opaque, const char *label, size_t xsize, size_t ysize, const JxlColorEncoding *color, const uint16_t *pixels)
Definition encode.h:1609
JXL_EXPORT void JxlEncoderInitBlendInfo(JxlBlendInfo *blend_info)
JXL_EXPORT void JxlEncoderCloseInput(JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetParallelRunner(JxlEncoder *enc, JxlParallelRunner parallel_runner, void *parallel_runner_opaque)
JXL_EXPORT void JxlEncoderCollectStats(JxlEncoderFrameSettings *frame_settings, JxlEncoderStats *stats)
JXL_EXPORT JxlEncoderStatus JxlEncoderFrameSettingsSetOption(JxlEncoderFrameSettings *frame_settings, JxlEncoderFrameSettingId option, int64_t value)
JXL_EXPORT JxlEncoder * JxlEncoderCreate(const JxlMemoryManager *memory_manager)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelBuffer(const JxlEncoderFrameSettings *frame_settings, const JxlPixelFormat *pixel_format, const void *buffer, size_t size, uint32_t index)
JXL_EXPORT JxlEncoderStatus JxlEncoderProcessOutput(JxlEncoder *enc, uint8_t **next_out, size_t *avail_out)
JXL_EXPORT JxlEncoderStatus JxlEncoderUseContainer(JxlEncoder *enc, JXL_BOOL use_container)
JXL_EXPORT void JxlColorEncodingSetToSRGB(JxlColorEncoding *color_encoding, JXL_BOOL is_gray)
JXL_EXPORT void JxlEncoderSetCms(JxlEncoder *enc, JxlCmsInterface cms)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameBitDepth(JxlEncoderFrameSettings *frame_settings, const JxlBitDepth *bit_depth)
JXL_EXPORT void JxlEncoderInitFrameHeader(JxlFrameHeader *frame_header)
JXL_EXPORT float JxlEncoderDistanceFromQuality(float quality)
JXL_EXPORT void JxlEncoderReset(JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameLossless(JxlEncoderFrameSettings *frame_settings, JXL_BOOL lossless)
struct JxlEncoderFrameSettings JxlEncoderFrameSettings
Definition encode.h:57
JXL_EXPORT JxlEncoderStatus JxlEncoderFrameSettingsSetFloatOption(JxlEncoderFrameSettings *frame_settings, JxlEncoderFrameSettingId option, float value)
JXL_EXPORT JxlEncoderStatus JxlEncoderUseBoxes(JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetOutputProcessor(JxlEncoder *enc, struct JxlEncoderOutputProcessor output_processor)
JXL_EXPORT void JxlEncoderInitBasicInfo(JxlBasicInfo *info)
struct JxlEncoderStats JxlEncoderStats
Definition stats.h:29
JXL_EXPORT JxlEncoderStatus JxlEncoderSetBasicInfo(JxlEncoder *enc, const JxlBasicInfo *info)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetColorEncoding(JxlEncoder *enc, const JxlColorEncoding *color)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelBlendInfo(JxlEncoderFrameSettings *frame_settings, size_t index, const JxlBlendInfo *blend_info)
JXL_EXPORT void JxlEncoderCloseBoxes(JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameDistance(JxlEncoderFrameSettings *frame_settings, float distance)
JxlEncoderStatus
Definition encode.h:62
JXL_EXPORT JxlEncoderStatus JxlEncoderSetUpsamplingMode(JxlEncoder *enc, int64_t factor, int64_t mode)
JXL_EXPORT void JxlEncoderAllowExpertOptions(JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameHeader(JxlEncoderFrameSettings *frame_settings, const JxlFrameHeader *frame_header)
JXL_EXPORT void JxlColorEncodingSetToLinearSRGB(JxlColorEncoding *color_encoding, JXL_BOOL is_gray)
JXL_EXPORT void JxlEncoderInitExtraChannelInfo(JxlExtraChannelType type, JxlExtraChannelInfo *info)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelDistance(JxlEncoderFrameSettings *frame_settings, size_t index, float distance)
JXL_EXPORT void JxlEncoderCloseFrames(JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderAddImageFrame(const JxlEncoderFrameSettings *frame_settings, const JxlPixelFormat *pixel_format, const void *buffer, size_t size)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetICCProfile(JxlEncoder *enc, const uint8_t *icc_profile, size_t size)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetFrameName(JxlEncoderFrameSettings *frame_settings, const char *frame_name)
JXL_EXPORT void JxlEncoderSetDebugImageCallback(JxlEncoderFrameSettings *frame_settings, JxlDebugImageCallback callback, void *opaque)
JXL_EXPORT uint32_t JxlEncoderVersion(void)
JXL_EXPORT JxlEncoderFrameSettings * JxlEncoderFrameSettingsCreate(JxlEncoder *enc, const JxlEncoderFrameSettings *source)
struct JxlEncoder JxlEncoder
Definition encode.h:47
JXL_EXPORT JxlEncoderError JxlEncoderGetError(JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelName(JxlEncoder *enc, size_t index, const char *name, size_t size)
JXL_EXPORT JxlEncoderStatus JxlEncoderAddBox(JxlEncoder *enc, const JxlBoxType type, const uint8_t *contents, size_t size, JXL_BOOL compress_box)
JXL_EXPORT JxlEncoderStatus JxlEncoderFlushInput(JxlEncoder *enc)
JxlEncoderError
Definition encode.h:83
JxlEncoderFrameSettingId
Definition encode.h:126
JXL_EXPORT void JxlEncoderDestroy(JxlEncoder *enc)
JXL_EXPORT JxlEncoderStatus JxlEncoderSetExtraChannelInfo(JxlEncoder *enc, size_t index, const JxlExtraChannelInfo *info)
JXL_EXPORT JxlEncoderStatus JxlEncoderStoreJPEGMetadata(JxlEncoder *enc, JXL_BOOL store_jpeg_metadata)
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_ENC_ERROR
Definition encode.h:70
@ JXL_ENC_NEED_MORE_OUTPUT
Definition encode.h:74
@ JXL_ENC_SUCCESS
Definition encode.h:66
@ JXL_ENC_ERR_NOT_SUPPORTED
Definition encode.h:110
@ JXL_ENC_ERR_JBRD
Definition encode.h:100
@ JXL_ENC_ERR_API_USAGE
Definition encode.h:116
@ JXL_ENC_ERR_OOM
Definition encode.h:95
@ JXL_ENC_ERR_OK
Definition encode.h:86
@ JXL_ENC_ERR_GENERIC
Definition encode.h:90
@ JXL_ENC_ERR_BAD_INPUT
Definition encode.h:104
@ JXL_ENC_FRAME_SETTING_DECODING_SPEED
Definition encode.h:138
@ JXL_ENC_FRAME_SETTING_JPEG_COMPRESS_BOXES
Definition encode.h:341
@ JXL_ENC_FRAME_SETTING_MODULAR_GROUP_SIZE
Definition encode.h:290
@ JXL_ENC_FRAME_SETTING_PROGRESSIVE_DC
Definition encode.h:248
@ JXL_ENC_FRAME_SETTING_DISABLE_PERCEPTUAL_HEURISTICS
Definition encode.h:394
@ JXL_ENC_FRAME_SETTING_EXTRA_CHANNEL_RESAMPLING
Definition encode.h:153
@ JXL_ENC_FRAME_SETTING_GROUP_ORDER_CENTER_X
Definition encode.h:220
@ JXL_ENC_FRAME_SETTING_USE_FULL_IMAGE_HEURISTICS
Definition encode.h:389
@ JXL_ENC_FRAME_SETTING_JPEG_KEEP_XMP
Definition encode.h:374
@ JXL_ENC_FRAME_SETTING_NOISE
Definition encode.h:177
@ JXL_ENC_FRAME_SETTING_ALREADY_DOWNSAMPLED
Definition encode.h:164
@ JXL_ENC_FRAME_SETTING_RESPONSIVE
Definition encode.h:230
@ JXL_ENC_FRAME_SETTING_JPEG_RECON_CFL
Definition encode.h:316
@ JXL_ENC_FRAME_SETTING_PATCHES
Definition encode.h:187
@ JXL_ENC_FRAME_SETTING_JPEG_KEEP_JUMBF
Definition encode.h:381
@ JXL_ENC_FRAME_SETTING_GROUP_ORDER
Definition encode.h:214
@ JXL_ENC_FRAME_SETTING_STRIP_ALPHA
Definition encode.h:434
@ JXL_ENC_FRAME_SETTING_EPF
Definition encode.h:192
@ JXL_ENC_FRAME_SETTING_CHANNEL_COLORS_GLOBAL_PERCENT
Definition encode.h:254
@ JXL_ENC_FRAME_SETTING_RESAMPLING
Definition encode.h:146
@ JXL_ENC_FRAME_SETTING_DOTS
Definition encode.h:182
@ JXL_ENC_FRAME_SETTING_COLOR_TRANSFORM
Definition encode.h:277
@ JXL_ENC_FRAME_SETTING_EFFORT
Definition encode.h:132
@ JXL_ENC_FRAME_SETTING_JPEG_RECON_LFS
Definition encode.h:439
@ JXL_ENC_FRAME_SETTING_MODULAR
Definition encode.h:203
@ JXL_ENC_FRAME_SETTING_MODULAR_COLOR_SPACE
Definition encode.h:286
@ JXL_ENC_FRAME_SETTING_KEEP_INVISIBLE
Definition encode.h:208
@ JXL_ENC_FRAME_SETTING_PHOTON_NOISE
Definition encode.h:171
@ JXL_ENC_FRAME_SETTING_BUFFERING
Definition encode.h:357
@ JXL_ENC_FRAME_SETTING_BROTLI_EFFORT
Definition encode.h:334
@ JXL_ENC_FRAME_SETTING_GROUP_ORDER_CENTER_Y
Definition encode.h:225
@ JXL_ENC_FRAME_SETTING_GABORISH
Definition encode.h:197
@ JXL_ENC_FRAME_SETTING_QPROGRESSIVE_AC
Definition encode.h:242
@ JXL_ENC_FRAME_SETTING_MODULAR_NB_PREV_CHANNELS
Definition encode.h:311
@ JXL_ENC_FRAME_SETTING_JPEG_KEEP_EXIF
Definition encode.h:366
@ JXL_ENC_FRAME_SETTING_FILL_ENUM
Definition encode.h:444
@ JXL_ENC_FRAME_SETTING_OUTPUT_MODE
Definition encode.h:419
@ JXL_ENC_FRAME_SETTING_PROGRESSIVE_AC
Definition encode.h:236
@ JXL_ENC_FRAME_SETTING_MODULAR_MA_TREE_LEARNING_PERCENT
Definition encode.h:303
@ JXL_ENC_FRAME_SETTING_LOSSY_PALETTE
Definition encode.h:270
@ JXL_ENC_FRAME_SETTING_MODULAR_PREDICTOR
Definition encode.h:297
@ JXL_ENC_FRAME_SETTING_PALETTE_COLORS
Definition encode.h:265
@ JXL_ENC_FRAME_SETTING_CHANNEL_COLORS_GROUP_PERCENT
Definition encode.h:260
@ JXL_ENC_FRAME_INDEX_BOX
Definition encode.h:327
JxlExtraChannelType
Definition codestream_header.h:44
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
Abstraction functions used by JPEG XL to allocate memory.
API to collect various statistics from JXL encoder.
Definition codestream_header.h:95
Definition types.h:133
Definition codestream_header.h:329
Definition encode.h:875
void(* release_buffer)(void *opaque, const void *buf)
Definition encode.h:979
void(* get_color_channels_pixel_format)(void *opaque, JxlPixelFormat *pixel_format)
Definition encode.h:894
void(* get_extra_channel_pixel_format)(void *opaque, size_t ec_index, JxlPixelFormat *pixel_format)
Definition encode.h:937
void * opaque
Definition encode.h:880
Definition cms_interface.h:227
Definition color_encoding.h:114
Definition encode.h:777
void * opaque
Definition encode.h:783
void(* seek)(void *opaque, uint64_t position)
Definition encode.h:825
void(* set_finalized_position)(void *opaque, uint64_t finalized_position)
Definition encode.h:838
void(* release_buffer)(void *opaque, size_t written_bytes)
Definition encode.h:813
Definition codestream_header.h:264
Definition codestream_header.h:390
Definition types.h:80
Data types for the JPEG XL API, for both encoding and decoding.