1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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_
|