Common API concepts
- group libjxl_common
Defines
-
JXL_BOOL
A portable
bool
replacement.JXL_BOOL is a “documentation” type: actually it is
int
, but in API it denotes a type, whose only values are JXL_TRUE and JXL_FALSE.
-
JXL_TRUE
Portable
true
replacement.
-
JXL_FALSE
Portable
false
replacement.
-
FROM_JXL_BOOL(C)
Converts JXL_BOOL to C++ bool.
Typedefs
-
typedef void *(*jpegxl_alloc_func)(void *opaque, size_t size)
Allocating function for a memory region of a given size.
Allocates a contiguous memory region of size
size
bytes. The returned memory may not be aligned to a specific size or initialized at all.- Param opaque:
custom memory manager handle provided by the caller.
- Param size:
in bytes of the requested memory region.
- Return:
NULL
if the memory can not be allocated,- Return:
pointer to the memory otherwise.
-
typedef void (*jpegxl_free_func)(void *opaque, void *address)
Deallocating function pointer type.
This function MUST do nothing if
address
isNULL
.- Param opaque:
custom memory manager handle provided by the caller.
- Param address:
memory region pointer returned by jpegxl_alloc_func, or
NULL
.
-
typedef struct JxlMemoryManagerStruct JxlMemoryManager
Memory Manager struct. These functions, when provided by the caller, will be used to handle memory allocations.
-
typedef char JxlBoxType[4]
Data type holding the 4-character type name of an ISOBMFF box.
Enums
-
enum JxlDataType
Data type for the sample values per channel per pixel.
Values:
-
enumerator JXL_TYPE_FLOAT
Use 32-bit single-precision floating point values, with range 0.0-1.0 (within gamut, may go outside this range for wide color gamut). Floating point output, either JXL_TYPE_FLOAT or JXL_TYPE_FLOAT16, is recommended for HDR and wide gamut images when color profile conversion is required.
-
enumerator JXL_TYPE_UINT8
Use type uint8_t. May clip wide color gamut data.
-
enumerator JXL_TYPE_UINT16
Use type uint16_t. May clip wide color gamut data.
-
enumerator JXL_TYPE_FLOAT16
Use 16-bit IEEE 754 half-precision floating point values
-
enumerator JXL_TYPE_FLOAT
-
enum JxlEndianness
Ordering of multi-byte data.
Values:
-
enumerator JXL_NATIVE_ENDIAN
Use the endianness of the system, either little endian or big endian, without forcing either specific endianness. Do not use if pixel data should be exported to a well defined format.
-
enumerator JXL_LITTLE_ENDIAN
Force little endian
-
enumerator JXL_BIG_ENDIAN
Force big endian
-
enumerator JXL_NATIVE_ENDIAN
-
enum JxlBitDepthType
Settings for the interpretation of UINT input and output buffers. (buffers using a FLOAT data type are not affected by this)
Values:
-
enumerator JXL_BIT_DEPTH_FROM_PIXEL_FORMAT
This is the default setting, where the encoder expects the input pixels to use the full range of the pixel format data type (e.g. for UINT16, the input range is 0 .. 65535 and the value 65535 is mapped to 1.0 when converting to float), and the decoder uses the full range to output pixels. If the bit depth in the basic info is different from this, the encoder expects the values to be rescaled accordingly (e.g. multiplied by 65535/4095 for a 12-bit image using UINT16 input data type).
-
enumerator JXL_BIT_DEPTH_FROM_CODESTREAM
If this setting is selected, the encoder expects the input pixels to be in the range defined by the bits_per_sample value of the basic info (e.g. for 12-bit images using UINT16 input data types, the allowed range is 0 .. 4095 and the value 4095 is mapped to 1.0 when converting to float), and the decoder outputs pixels in this range.
-
enumerator JXL_BIT_DEPTH_CUSTOM
This setting can only be used in the decoder to select a custom range for pixel output
-
enumerator JXL_BIT_DEPTH_FROM_PIXEL_FORMAT
-
struct JxlMemoryManagerStruct
- #include <memory_manager.h>
Memory Manager struct. These functions, when provided by the caller, will be used to handle memory allocations.
Public Members
-
void *opaque
The opaque pointer that will be passed as the first parameter to all the functions in this struct.
-
jpegxl_alloc_func alloc
Memory allocation function. This can be NULL if and only if also the free() member in this class is NULL. All dynamic memory will be allocated and freed with these functions if they are not NULL, otherwise with the standard malloc/free.
-
jpegxl_free_func free
Free function matching the alloc() member.
-
void *opaque
-
struct JxlPixelFormat
- #include <types.h>
Data type for the sample values per channel per pixel for the output buffer for pixels. This is not necessarily the same as the data type encoded in the codestream. The channels are interleaved per pixel. The pixels are organized row by row, left to right, top to bottom. TODO(lode): support different channel orders if needed (RGB, BGR, …)
Public Members
-
uint32_t num_channels
Amount of channels available in a pixel buffer. 1: single-channel data, e.g. grayscale or a single extra channel 2: single-channel + alpha 3: trichromatic, e.g. RGB 4: trichromatic + alpha TODO(lode): this needs finetuning. It is not yet defined how the user chooses output color space. CMYK+alpha needs 5 channels.
-
JxlDataType data_type
Data type of each channel.
-
JxlEndianness endianness
Whether multi-byte data types are represented in big endian or little endian format. This applies to JXL_TYPE_UINT16 and JXL_TYPE_FLOAT.
-
size_t align
Align scanlines to a multiple of align bytes, or 0 to require no alignment at all (which has the same effect as value 1)
-
uint32_t num_channels
-
struct JxlBitDepth
- #include <types.h>
Data type for describing the interpretation of the input and output buffers in terms of the range of allowed input and output pixel values.
Public Members
-
JxlBitDepthType type
Bit depth setting, see comment on JxlBitDepthType
-
uint32_t bits_per_sample
Custom bits per sample
-
uint32_t exponent_bits_per_sample
Custom exponent bits per sample
-
JxlBitDepthType type
-
JXL_BOOL