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 
881  JxlCmsInterface cms);
882 // TODO(firsching): add a function JxlDecoderSetDefaultCms() for setting a
883 // default in case libjxl is build with a CMS.
884 
898  const JxlDecoder* dec, const JxlPixelFormat* format, size_t* size);
899 
916  JxlDecoder* dec, const JxlPixelFormat* format, void* buffer, size_t size);
917 
931  JxlFrameHeader* header);
932 
946  char* name, size_t size);
947 
961  const JxlDecoder* dec, size_t index, JxlBlendInfo* blend_info);
962 
979  const JxlDecoder* dec, const JxlPixelFormat* format, size_t* size);
980 
998  JxlDecoder* dec, const JxlPixelFormat* format, void* buffer, size_t size);
999 
1016 typedef void (*JxlImageOutCallback)(void* opaque, size_t x, size_t y,
1017  size_t num_pixels, const void* pixels);
1018 
1031 typedef void* (*JxlImageOutInitCallback)(void* init_opaque, size_t num_threads,
1032  size_t num_pixels_per_thread);
1033 
1050 typedef void (*JxlImageOutRunCallback)(void* run_opaque, size_t thread_id,
1051  size_t x, size_t y, size_t num_pixels,
1052  const void* pixels);
1053 
1061 typedef void (*JxlImageOutDestroyCallback)(void* run_opaque);
1062 
1105 JXL_EXPORT JxlDecoderStatus
1107  JxlImageOutCallback callback, void* opaque);
1108 
1129  JxlDecoder* dec, const JxlPixelFormat* format,
1130  JxlImageOutInitCallback init_callback, JxlImageOutRunCallback run_callback,
1131  JxlImageOutDestroyCallback destroy_callback, void* init_opaque);
1132 
1149  const JxlDecoder* dec, const JxlPixelFormat* format, size_t* size,
1150  uint32_t index);
1151 
1182 JXL_EXPORT JxlDecoderStatus
1184  void* buffer, size_t size, uint32_t index);
1185 
1205  uint8_t* data, size_t size);
1206 
1223 JXL_EXPORT size_t JxlDecoderReleaseJPEGBuffer(JxlDecoder* dec);
1224 
1248  uint8_t* data, size_t size);
1249 
1266 JXL_EXPORT size_t JxlDecoderReleaseBoxBuffer(JxlDecoder* dec);
1267 
1289  JXL_BOOL decompress);
1290 
1357  JxlBoxType type,
1358  JXL_BOOL decompressed);
1359 
1378  uint64_t* size);
1379 
1391 JXL_EXPORT JxlDecoderStatus
1393 
1403 
1421 
1434 JXL_EXPORT JxlDecoderStatus
1436 
1437 #if defined(__cplusplus) || defined(c_plusplus)
1438 }
1439 #endif
1440 
1441 #endif /* JXL_DECODE_H_ */
1442 
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:146
#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 JxlDecoderSetCms(JxlDecoder *dec, JxlCmsInterface cms)
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:1031
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 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:1050
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:1016
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:1061
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:133
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:79
Data types for the JPEG XL API, for both encoding and decoding.