// Copyright (c) the JPEG XL Project Authors. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file.
// FJXL_STANDALONE=1 for a stand-alone jxl encoder // FJXL_STANDALONE=0 for use in libjxl to encode frames (but no image header) #ifndef FJXL_STANDALONE #define FJXL_STANDALONE 0 #endif
#if FJXL_STANDALONE // Simplified version of the streaming input source from jxl/encode.h // We only need this part to wrap the full image buffer in the standalone mode // and this way we don't need to depend on the jxl headers. struct JxlChunkedFrameInputSource { void* opaque; constvoid* (*get_color_channel_data_at)(void* opaque, size_t xpos,
size_t ypos, size_t xsize,
size_t ysize, size_t* row_offset); void (*release_buffer)(void* opaque, constvoid* buf);
}; // The standalone version does not use this struct, but we define it here so // that we don't have to clutter all the function signatures with defines. struct JxlEncoderOutputProcessorWrapper { int unused;
}; #endif
// Simple encoding API.
// A FJxlParallelRunner must call fun(opaque, i) for all i from 0 to count. It // may do so in parallel. typedefvoid(FJxlParallelRunner)(void* runner_opaque, void* opaque, void fun(void*, size_t), size_t count);
#if FJXL_STANDALONE // You may pass `nullptr` as a runner: encoding will be sequential.
size_t JxlFastLosslessEncode(constunsignedchar* rgba, size_t width,
size_t row_stride, size_t height, size_t nb_chans,
size_t bitdepth, bool big_endian, int effort, unsignedchar** output, void* runner_opaque,
FJxlParallelRunner runner); #endif
// More complex API for cases in which you may want to allocate your own buffer // and other advanced use cases.
// Opaque struct that represents an intermediate state of the computation. struct JxlFastLosslessFrameState;
// Returned JxlFastLosslessFrameState must be freed by calling // JxlFastLosslessFreeFrameState.
JxlFastLosslessFrameState* JxlFastLosslessPrepareFrame(
JxlChunkedFrameInputSource input, size_t width, size_t height,
size_t nb_chans, size_t bitdepth, bool big_endian, int effort, int oneshot);
#if !FJXL_STANDALONE class JxlEncoderOutputProcessorWrapper; #endif
// Prepare the (image/frame) header. You may encode animations by concatenating // the output of multiple frames, of which the first one has add_image_header = // 1 and subsequent ones have add_image_header = 0, and all frames but the last // one have is_last = 0. // (when FJXL_STANDALONE=0, add_image_header has to be 0) void JxlFastLosslessPrepareHeader(JxlFastLosslessFrameState* frame, int add_image_header, int is_last);
// Upper bound on the required output size, including any padding that may be // required by JxlFastLosslessWriteOutput. Cannot be called before // JxlFastLosslessPrepareHeader.
size_t JxlFastLosslessMaxRequiredOutput(const JxlFastLosslessFrameState* frame);
// Actual size of the frame once it is encoded. This is not identical to // JxlFastLosslessMaxRequiredOutput because JxlFastLosslessWriteOutput may // require extra padding.
size_t JxlFastLosslessOutputSize(const JxlFastLosslessFrameState* frame);
// Writes the frame to the given output buffer. Returns the number of bytes that // were written, which is at least 1 unless the entire output has been written // already. It is required that `output_size >= 32` when calling this function. // This function must be called repeatedly until it returns 0.
size_t JxlFastLosslessWriteOutput(JxlFastLosslessFrameState* frame, unsignedchar* output, size_t output_size);
// Frees the provided frame state. void JxlFastLosslessFreeFrameState(JxlFastLosslessFrameState* frame);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.