diff options
Diffstat (limited to 'media/libjxl/src/tools/cjxl.h')
-rw-r--r-- | media/libjxl/src/tools/cjxl.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/media/libjxl/src/tools/cjxl.h b/media/libjxl/src/tools/cjxl.h new file mode 100644 index 0000000000..1be3500dfd --- /dev/null +++ b/media/libjxl/src/tools/cjxl.h @@ -0,0 +1,109 @@ +// 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. + +#ifndef TOOLS_CJXL_H_ +#define TOOLS_CJXL_H_ + +#include <stddef.h> + +#include <string> +#include <thread> +#include <utility> + +#include "lib/extras/dec/color_hints.h" +#include "lib/jxl/base/data_parallel.h" +#include "lib/jxl/base/override.h" +#include "lib/jxl/base/padded_bytes.h" +#include "lib/jxl/base/status.h" +#include "lib/jxl/base/thread_pool_internal.h" +#include "lib/jxl/codec_in_out.h" +#include "lib/jxl/enc_params.h" +#include "lib/jxl/jxl_inspection.h" +#include "tools/cmdline.h" + +namespace jpegxl { +namespace tools { + +struct CompressArgs { + void SetInspectorImage3F(const jxl::InspectorImage3F& inspector) { + inspector_image3f = inspector; + } + + // Add all the command line options to the CommandLineParser. Note that the + // options are tied to the instance that this was called on. + void AddCommandLineOptions(CommandLineParser* cmdline); + + // Post-processes and validates the passed arguments, checking whether all + // passed options are compatible. Returns whether the validation was + // successful. + jxl::Status ValidateArgs(const CommandLineParser& cmdline); + + // Validates the arguments again, having loaded the input so sensible defaults + // can be chosen based on e.g. dimensions. + jxl::Status ValidateArgsAfterLoad(const CommandLineParser& cmdline, + const jxl::CodecInOut& io); + + // Common flags. + bool version = false; + bool use_container = false; + bool no_container = false; + bool quiet = false; + + const char* file_in = nullptr; + const char* file_out = nullptr; + jxl::Override print_profile = jxl::Override::kDefault; + + // Decoding source image flags + jxl::extras::ColorHints color_hints; + + // JXL flags + size_t override_bitdepth = 0; + jxl::CompressParams params; + size_t num_threads = std::thread::hardware_concurrency(); + size_t num_reps = 1; + float intensity_target = 0; + + // Filename for the user provided saliency-map. + std::string saliency_map_filename; + + // Whether to perform lossless transcoding with kVarDCT or kJPEG encoding. + // If true, attempts to load JPEG coefficients instead of pixels. + // Reset to false if input image is not a JPEG. + bool jpeg_transcode = true; + + bool store_jpeg_metadata = true; + + float quality = -1001.f; // Default to lossless if input is already lossy, + // or to VarDCT otherwise. + bool progressive = false; + bool default_settings = true; + bool force_premultiplied = false; + + // Will get passed on to AuxOut. + jxl::InspectorImage3F inspector_image3f; + + // References (ids) of specific options to check if they were matched. + CommandLineParser::OptionId opt_distance_id = -1; + CommandLineParser::OptionId opt_target_size_id = -1; + CommandLineParser::OptionId opt_target_bpp_id = -1; + CommandLineParser::OptionId opt_quality_id = -1; + CommandLineParser::OptionId opt_near_lossless_id = -1; + CommandLineParser::OptionId opt_intensity_target_id = -1; + CommandLineParser::OptionId opt_color_id = -1; + CommandLineParser::OptionId opt_m_group_size_id = -1; +}; + +jxl::Status LoadAll(CompressArgs& args, jxl::ThreadPoolInternal* pool, + jxl::CodecInOut* io, double* decode_mps); + +// The input image must already have been loaded into io using LoadAll. +jxl::Status CompressJxl(jxl::CodecInOut& io, double decode_mps, + jxl::ThreadPoolInternal* pool, CompressArgs& args, + jxl::PaddedBytes* compressed, bool print_stats = true); + +} // namespace tools +} // namespace jpegxl + +#endif // TOOLS_CJXL_H_ |