libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

test_params.h (4806B)


      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 #ifndef LIB_JPEGLI_TEST_PARAMS_H_
      7 #define LIB_JPEGLI_TEST_PARAMS_H_
      8 
      9 #include <stddef.h>
     10 #include <stdint.h>
     11 
     12 #include <algorithm>
     13 #include <vector>
     14 
     15 #include "lib/jpegli/types.h"
     16 
     17 namespace jpegli {
     18 
     19 // We define this here as well to make sure that the *_api_test.cc tests only
     20 // use the public API and therefore we don't include any *_internal.h headers.
     21 template <typename T1, typename T2>
     22 constexpr inline T1 DivCeil(T1 a, T2 b) {
     23   return (a + b - 1) / b;
     24 }
     25 
     26 #define ARRAY_SIZE(X) (sizeof(X) / sizeof((X)[0]))
     27 
     28 static constexpr int kLastScan = 0xffff;
     29 
     30 static uint32_t kTestColorMap[] = {
     31     0x000000, 0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0x00ffff,
     32     0xff00ff, 0xffffff, 0x6251fc, 0x45d9c7, 0xa7f059, 0xd9a945,
     33     0xfa4e44, 0xceaffc, 0xbad7db, 0xc1f0b1, 0xdbca9a, 0xfacac5,
     34     0xf201ff, 0x0063db, 0x00f01c, 0xdbb204, 0xf12f0c, 0x7ba1dc};
     35 static constexpr int kTestColorMapNumColors = ARRAY_SIZE(kTestColorMap);
     36 
     37 static constexpr int kSpecialMarker0 = 0xe5;
     38 static constexpr int kSpecialMarker1 = 0xe9;
     39 static constexpr uint8_t kMarkerData[] = {0, 1, 255, 0, 17};
     40 static constexpr uint8_t kMarkerSequence[] = {0xe6, 0xe8, 0xe7,
     41                                               0xe6, 0xe7, 0xe8};
     42 static constexpr size_t kMarkerSequenceLen = ARRAY_SIZE(kMarkerSequence);
     43 
     44 enum JpegIOMode {
     45   PIXELS,
     46   RAW_DATA,
     47   COEFFICIENTS,
     48 };
     49 
     50 struct CustomQuantTable {
     51   int slot_idx = 0;
     52   uint16_t table_type = 0;
     53   int scale_factor = 100;
     54   bool add_raw = false;
     55   bool force_baseline = true;
     56   std::vector<unsigned int> basic_table;
     57   std::vector<unsigned int> quantval;
     58   void Generate();
     59 };
     60 
     61 struct TestImage {
     62   size_t xsize = 2268;
     63   size_t ysize = 1512;
     64   int color_space = 2;  // JCS_RGB
     65   size_t components = 3;
     66   JpegliDataType data_type = JPEGLI_TYPE_UINT8;
     67   JpegliEndianness endianness = JPEGLI_NATIVE_ENDIAN;
     68   std::vector<uint8_t> pixels;
     69   std::vector<std::vector<uint8_t>> raw_data;
     70   std::vector<std::vector<int16_t>> coeffs;
     71   void AllocatePixels() {
     72     pixels.resize(ysize * xsize * components *
     73                   jpegli_bytes_per_sample(data_type));
     74   }
     75   void Clear() {
     76     pixels.clear();
     77     raw_data.clear();
     78     coeffs.clear();
     79   }
     80 };
     81 
     82 struct CompressParams {
     83   int quality = 90;
     84   bool set_jpeg_colorspace = false;
     85   int jpeg_color_space = 0;  // JCS_UNKNOWN
     86   std::vector<int> quant_indexes;
     87   std::vector<CustomQuantTable> quant_tables;
     88   std::vector<int> h_sampling;
     89   std::vector<int> v_sampling;
     90   std::vector<int> comp_ids;
     91   int override_JFIF = -1;
     92   int override_Adobe = -1;
     93   bool add_marker = false;
     94   bool simple_progression = false;
     95   // -1 is library default
     96   // 0, 1, 2 is set through jpegli_set_progressive_level()
     97   // 2 + N is kScriptN
     98   int progressive_mode = -1;
     99   unsigned int restart_interval = 0;
    100   int restart_in_rows = 0;
    101   int smoothing_factor = 0;
    102   int optimize_coding = -1;
    103   bool use_flat_dc_luma_code = false;
    104   bool omit_standard_tables = false;
    105   bool xyb_mode = false;
    106   bool libjpeg_mode = false;
    107   bool use_adaptive_quantization = true;
    108   std::vector<uint8_t> icc;
    109 
    110   int h_samp(int c) const { return h_sampling.empty() ? 1 : h_sampling[c]; }
    111   int v_samp(int c) const { return v_sampling.empty() ? 1 : v_sampling[c]; }
    112   int max_h_sample() const {
    113     auto it = std::max_element(h_sampling.begin(), h_sampling.end());
    114     return it == h_sampling.end() ? 1 : *it;
    115   }
    116   int max_v_sample() const {
    117     auto it = std::max_element(v_sampling.begin(), v_sampling.end());
    118     return it == v_sampling.end() ? 1 : *it;
    119   }
    120   int comp_width(const TestImage& input, int c) const {
    121     return DivCeil(input.xsize * h_samp(c), max_h_sample() * 8) * 8;
    122   }
    123   int comp_height(const TestImage& input, int c) const {
    124     return DivCeil(input.ysize * v_samp(c), max_v_sample() * 8) * 8;
    125   }
    126 };
    127 
    128 enum ColorQuantMode {
    129   CQUANT_1PASS,
    130   CQUANT_2PASS,
    131   CQUANT_EXTERNAL,
    132   CQUANT_REUSE,
    133 };
    134 
    135 struct ScanDecompressParams {
    136   int max_scan_number;
    137   int dither_mode;
    138   ColorQuantMode color_quant_mode;
    139 };
    140 
    141 struct DecompressParams {
    142   float size_factor = 1.0f;
    143   size_t chunk_size = 65536;
    144   size_t max_output_lines = 16;
    145   JpegIOMode output_mode = PIXELS;
    146   JpegliDataType data_type = JPEGLI_TYPE_UINT8;
    147   JpegliEndianness endianness = JPEGLI_NATIVE_ENDIAN;
    148   bool set_out_color_space = false;
    149   int out_color_space = 0;  // JCS_UNKNOWN
    150   bool crop_output = false;
    151   bool do_block_smoothing = false;
    152   bool do_fancy_upsampling = true;
    153   bool skip_scans = false;
    154   int scale_num = 1;
    155   int scale_denom = 1;
    156   bool quantize_colors = false;
    157   int desired_number_of_colors = 256;
    158   std::vector<ScanDecompressParams> scan_params;
    159 };
    160 
    161 }  // namespace jpegli
    162 
    163 #endif  // LIB_JPEGLI_TEST_PARAMS_H_