LIBJXL
decode.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_DECODE_H_
14 #define JXL_DECODE_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/types.h>
23 #include <jxl/version.h>
24 #include <stddef.h>
25 #include <stdint.h>
26 
27 #if defined(__cplusplus) || defined(c_plusplus)
28 extern "C" {
29 #endif
30 
38 JXL_EXPORT uint32_t JxlDecoderVersion(void);
39 
42 typedef enum {
46 
49 
54 
59 } JxlSignature;
60 
76 JXL_EXPORT JxlSignature JxlSignatureCheck(const uint8_t* buf, size_t len);
77 
84 typedef struct JxlDecoderStruct JxlDecoder;
85 
98 JXL_EXPORT JxlDecoder* JxlDecoderCreate(const JxlMemoryManager* memory_manager);
99 
107 JXL_EXPORT void JxlDecoderReset(JxlDecoder* dec);
108 
114 JXL_EXPORT void JxlDecoderDestroy(JxlDecoder* dec);
115 
122 typedef enum {
137 
142 
158 
169 
178 
185 
191 
200 
210 
220 
240  JXL_DEC_FRAME = 0x400,
241 
254 
267 
303  JXL_DEC_BOX = 0x4000,
304 
322 
331 typedef enum {
332  // after completed kRegularFrames
333  kFrames = 0,
334  // after completed DC (1:8)
335  kDC = 1,
336  // after completed AC passes that are the last pass for their resolution
337  // target.
338  kLastPasses = 2,
339  // after completed AC passes that are not the last pass for their resolution
340  // target.
341  kPasses = 3,
342  // during DC frame when lower resolution are completed (1:32, 1:16)
343  kDCProgressive = 4,
344  // after completed groups
345  kDCGroups = 5,
346  // after completed groups
347  kGroups = 6,
349 
373 JXL_EXPORT void JxlDecoderRewind(JxlDecoder* dec);
374 
393 JXL_EXPORT void JxlDecoderSkipFrames(JxlDecoder* dec, size_t amount);
394 
408 
421 JXL_EXPORT JxlDecoderStatus
423  void* parallel_runner_opaque);
424 
440 JXL_EXPORT size_t JxlDecoderSizeHintBasicInfo(const JxlDecoder* dec);
441 
455  int events_wanted);
456 
488 JXL_EXPORT JxlDecoderStatus
490 
506 JXL_EXPORT JxlDecoderStatus
508 
519 JXL_EXPORT JxlDecoderStatus
521 
536  JXL_BOOL coalescing);
537 
579 
595  const uint8_t* data,
596  size_t size);
597 
617 JXL_EXPORT size_t JxlDecoderReleaseInput(JxlDecoder* dec);
618 
637 JXL_EXPORT void JxlDecoderCloseInput(JxlDecoder* dec);
638 
651  JxlBasicInfo* info);
652 
666  const JxlDecoder* dec, size_t index, JxlExtraChannelInfo* info);
667 
683  size_t index,
684  char* name,
685  size_t size);
686 
692 typedef enum {
696 
700 
750  const JxlDecoder* dec, JxlColorProfileTarget target,
751  JxlColorEncoding* color_encoding);
752 
776  const JxlDecoder* dec, JxlColorProfileTarget target, size_t* size);
777 
794  const JxlDecoder* dec, JxlColorProfileTarget target, uint8_t* icc_profile,
795  size_t size);
796 
808  JxlDecoder* dec, const JxlColorEncoding* color_encoding);
809 
821  JxlDecoder* dec, float desired_intensity_target);
822 
865  JxlDecoder* dec, const JxlColorEncoding* color_encoding,
866  const uint8_t* icc_data, size_t icc_size);
867 
880 JXL_EXPORT void JxlDecoderSetCms(JxlDecoder* dec, JxlCmsInterface cms);
881 // TODO(firsching): add a function JxlDecoderSetDefaultCms() for setting a
882 // default in case libjxl is build with a CMS.
883 
897  const JxlDecoder* dec, const JxlPixelFormat* format, size_t* size);
898 
915  JxlDecoder* dec, const JxlPixelFormat* format, void* buffer, size_t size);
916 
930  JxlFrameHeader* header);
931 
945  char* name, size_t size);
946 
960  const JxlDecoder* dec, size_t index, JxlBlendInfo* blend_info);
961 
978  const JxlDecoder* dec, const JxlPixelFormat* format, size_t* size);
979 
997  JxlDecoder* dec, const JxlPixelFormat* format, void* buffer, size_t size);
998 
1015 typedef void (*JxlImageOutCallback)(void* opaque, size_t x, size_t y,
1016  size_t num_pixels, const void* pixels);
1017 
1030 typedef void* (*JxlImageOutInitCallback)(void* init_opaque, size_t num_threads,
1031  size_t num_pixels_per_thread);
1032 
1049 typedef void (*JxlImageOutRunCallback)(void* run_opaque, size_t thread_id,
1050  size_t x, size_t y, size_t num_pixels,
1051  const void* pixels);
1052 
1060 typedef void (*JxlImageOutDestroyCallback)(void* run_opaque);
1061 
1104 JXL_EXPORT JxlDecoderStatus
1106  JxlImageOutCallback callback, void* opaque);
1107 
1128  JxlDecoder* dec, const JxlPixelFormat* format,
1129  JxlImageOutInitCallback init_callback, JxlImageOutRunCallback run_callback,
1130  JxlImageOutDestroyCallback destroy_callback, void* init_opaque);
1131 
1148  const JxlDecoder* dec, const JxlPixelFormat* format, size_t* size,
1149  uint32_t index);
1150 
1181 JXL_EXPORT JxlDecoderStatus
1183  void* buffer, size_t size, uint32_t index);
1184 
1204  uint8_t* data, size_t size);
1205 
1222 JXL_EXPORT size_t JxlDecoderReleaseJPEGBuffer(JxlDecoder* dec);
1223 
1247  uint8_t* data, size_t size);
1248 
1265 JXL_EXPORT size_t JxlDecoderReleaseBoxBuffer(JxlDecoder* dec);
1266 
1288  JXL_BOOL decompress);
1289 
1356  JxlBoxType type,
1357  JXL_BOOL decompressed);
1358 
1377  uint64_t* size);
1378 
1390 JXL_EXPORT JxlDecoderStatus
1392 
1402 
1420 
1433 JXL_EXPORT JxlDecoderStatus
1435 
1436 #if defined(__cplusplus) || defined(c_plusplus)
1437 }
1438 #endif
1439 
1440 #endif /* JXL_DECODE_H_ */
1441 
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...
char JxlBoxType[4]
Definition: types.h:144
#define JXL_BOOL
Definition: types.h:30
JXL_EXPORT size_t JxlDecoderReleaseBoxBuffer(JxlDecoder *dec)
JXL_EXPORT void JxlDecoderSkipFrames(JxlDecoder *dec, size_t amount)
JXL_EXPORT uint32_t JxlDecoderVersion(void)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetOutputColorProfile(JxlDecoder *dec, const JxlColorEncoding *color_encoding, const uint8_t *icc_data, size_t icc_size)
JXL_EXPORT size_t JxlDecoderReleaseInput(JxlDecoder *dec)
JXL_EXPORT JxlDecoderStatus JxlDecoderPreviewOutBufferSize(const JxlDecoder *dec, const JxlPixelFormat *format, size_t *size)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetImageOutBitDepth(JxlDecoder *dec, const JxlBitDepth *bit_depth)
JXL_EXPORT void JxlDecoderRewind(JxlDecoder *dec)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetMultithreadedImageOutCallback(JxlDecoder *dec, const JxlPixelFormat *format, JxlImageOutInitCallback init_callback, JxlImageOutRunCallback run_callback, JxlImageOutDestroyCallback destroy_callback, void *init_opaque)
JXL_EXPORT JxlDecoderStatus JxlDecoderGetColorAsEncodedProfile(const JxlDecoder *dec, JxlColorProfileTarget target, JxlColorEncoding *color_encoding)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetDesiredIntensityTarget(JxlDecoder *dec, float desired_intensity_target)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetPreviewOutBuffer(JxlDecoder *dec, const JxlPixelFormat *format, void *buffer, size_t size)
JXL_EXPORT JxlDecoderStatus JxlDecoderGetFrameName(const JxlDecoder *dec, char *name, size_t size)
JXL_EXPORT JxlDecoderStatus JxlDecoderGetExtraChannelName(const JxlDecoder *dec, size_t index, char *name, size_t size)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetCoalescing(JxlDecoder *dec, JXL_BOOL coalescing)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetInput(JxlDecoder *dec, const uint8_t *data, size_t size)
JXL_EXPORT JxlDecoderStatus JxlDecoderGetBoxSizeRaw(const JxlDecoder *dec, uint64_t *size)
JXL_EXPORT void JxlDecoderCloseInput(JxlDecoder *dec)
JXL_EXPORT JxlDecoderStatus JxlDecoderGetFrameHeader(const JxlDecoder *dec, JxlFrameHeader *header)
JXL_EXPORT JxlDecoderStatus JxlDecoderGetICCProfileSize(const JxlDecoder *dec, JxlColorProfileTarget target, size_t *size)
JXL_EXPORT size_t JxlDecoderSizeHintBasicInfo(const JxlDecoder *dec)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetImageOutBuffer(JxlDecoder *dec, const JxlPixelFormat *format, void *buffer, size_t size)
JXL_EXPORT size_t JxlDecoderGetIntendedDownsamplingRatio(JxlDecoder *dec)
JXL_EXPORT JxlDecoderStatus JxlDecoderImageOutBufferSize(const JxlDecoder *dec, const JxlPixelFormat *format, size_t *size)
JXL_EXPORT JxlDecoderStatus JxlDecoderGetExtraChannelInfo(const JxlDecoder *dec, size_t index, JxlExtraChannelInfo *info)
JXL_EXPORT JxlDecoderStatus JxlDecoderSkipCurrentFrame(JxlDecoder *dec)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetDecompressBoxes(JxlDecoder *dec, JXL_BOOL decompress)
JXL_EXPORT size_t JxlDecoderReleaseJPEGBuffer(JxlDecoder *dec)
void *(* JxlImageOutInitCallback)(void *init_opaque, size_t num_threads, size_t num_pixels_per_thread)
Definition: decode.h:1030
JXL_EXPORT JxlDecoderStatus JxlDecoderGetColorAsICCProfile(const JxlDecoder *dec, JxlColorProfileTarget target, uint8_t *icc_profile, size_t size)
JxlColorProfileTarget
Definition: decode.h:692
JXL_EXPORT JxlDecoderStatus JxlDecoderExtraChannelBufferSize(const JxlDecoder *dec, const JxlPixelFormat *format, size_t *size, uint32_t index)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetBoxBuffer(JxlDecoder *dec, uint8_t *data, size_t size)
JxlSignature
Definition: decode.h:42
JXL_EXPORT void JxlDecoderSetCms(JxlDecoder *dec, JxlCmsInterface cms)
JXL_EXPORT JxlDecoderStatus JxlDecoderSubscribeEvents(JxlDecoder *dec, int events_wanted)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetParallelRunner(JxlDecoder *dec, JxlParallelRunner parallel_runner, void *parallel_runner_opaque)
JXL_EXPORT JxlDecoderStatus JxlDecoderProcessInput(JxlDecoder *dec)
void(* JxlImageOutRunCallback)(void *run_opaque, size_t thread_id, size_t x, size_t y, size_t num_pixels, const void *pixels)
Definition: decode.h:1049
JXL_EXPORT JxlDecoderStatus JxlDecoderSetPreferredColorProfile(JxlDecoder *dec, const JxlColorEncoding *color_encoding)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetImageOutCallback(JxlDecoder *dec, const JxlPixelFormat *format, JxlImageOutCallback callback, void *opaque)
void(* JxlImageOutCallback)(void *opaque, size_t x, size_t y, size_t num_pixels, const void *pixels)
Definition: decode.h:1015
JXL_EXPORT JxlDecoderStatus JxlDecoderGetBoxType(JxlDecoder *dec, JxlBoxType type, JXL_BOOL decompressed)
JXL_EXPORT JxlDecoderStatus JxlDecoderGetBasicInfo(const JxlDecoder *dec, JxlBasicInfo *info)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetUnpremultiplyAlpha(JxlDecoder *dec, JXL_BOOL unpremul_alpha)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetKeepOrientation(JxlDecoder *dec, JXL_BOOL skip_reorientation)
void(* JxlImageOutDestroyCallback)(void *run_opaque)
Definition: decode.h:1060
JXL_EXPORT JxlDecoderStatus JxlDecoderFlushImage(JxlDecoder *dec)
JXL_EXPORT JxlDecoderStatus JxlDecoderGetExtraChannelBlendInfo(const JxlDecoder *dec, size_t index, JxlBlendInfo *blend_info)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetJPEGBuffer(JxlDecoder *dec, uint8_t *data, size_t size)
JXL_EXPORT void JxlDecoderDestroy(JxlDecoder *dec)
JXL_EXPORT JxlSignature JxlSignatureCheck(const uint8_t *buf, size_t len)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetProgressiveDetail(JxlDecoder *dec, JxlProgressiveDetail detail)
JXL_EXPORT JxlDecoder * JxlDecoderCreate(const JxlMemoryManager *memory_manager)
JxlDecoderStatus
Definition: decode.h:122
struct JxlDecoderStruct JxlDecoder
Definition: decode.h:84
JxlProgressiveDetail
Definition: decode.h:331
JXL_EXPORT JxlDecoderStatus JxlDecoderSetRenderSpotcolors(JxlDecoder *dec, JXL_BOOL render_spotcolors)
JXL_EXPORT void JxlDecoderReset(JxlDecoder *dec)
JXL_EXPORT JxlDecoderStatus JxlDecoderSetExtraChannelBuffer(JxlDecoder *dec, const JxlPixelFormat *format, void *buffer, size_t size, uint32_t index)
@ JXL_COLOR_PROFILE_TARGET_DATA
Definition: decode.h:698
@ JXL_COLOR_PROFILE_TARGET_ORIGINAL
Definition: decode.h:695
@ JXL_SIG_NOT_ENOUGH_BYTES
Definition: decode.h:45
@ JXL_SIG_INVALID
Definition: decode.h:48
@ JXL_SIG_CONTAINER
Definition: decode.h:58
@ JXL_SIG_CODESTREAM
Definition: decode.h:53
@ JXL_DEC_JPEG_RECONSTRUCTION
Definition: decode.h:266
@ JXL_DEC_JPEG_NEED_MORE_OUTPUT
Definition: decode.h:184
@ JXL_DEC_BASIC_INFO
Definition: decode.h:199
@ JXL_DEC_FRAME_PROGRESSION
Definition: decode.h:320
@ JXL_DEC_ERROR
Definition: decode.h:141
@ JXL_DEC_NEED_IMAGE_OUT_BUFFER
Definition: decode.h:177
@ JXL_DEC_FULL_IMAGE
Definition: decode.h:253
@ JXL_DEC_COLOR_ENCODING
Definition: decode.h:209
@ JXL_DEC_SUCCESS
Definition: decode.h:136
@ JXL_DEC_PREVIEW_IMAGE
Definition: decode.h:219
@ JXL_DEC_BOX_NEED_MORE_OUTPUT
Definition: decode.h:190
@ JXL_DEC_BOX
Definition: decode.h:303
@ JXL_DEC_NEED_MORE_INPUT
Definition: decode.h:157
@ JXL_DEC_NEED_PREVIEW_OUT_BUFFER
Definition: decode.h:168
@ JXL_DEC_FRAME
Definition: decode.h:240
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
Abstraction functions used by JPEG XL to allocate memory.
Definition: codestream_header.h:95
Definition: types.h:131
Definition: codestream_header.h:328
Definition: cms_interface.h:224
Definition: color_encoding.h:116
Definition: codestream_header.h:263
Definition: codestream_header.h:389
Definition: memory_manager.h:51
Definition: types.h:77
Data types for the JPEG XL API, for both encoding and decoding.