tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

enc_ans_params.h (2567B)


      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_JXL_ENC_ANS_PARAMS_H_
      7 #define LIB_JXL_ENC_ANS_PARAMS_H_
      8 
      9 // Encoder-only parameter needed for ANS entropy encoding methods.
     10 
     11 #include <stdint.h>
     12 #include <stdlib.h>
     13 
     14 #include <vector>
     15 
     16 #include "lib/jxl/common.h"
     17 
     18 namespace jxl {
     19 
     20 // Forward declaration to break include cycle.
     21 struct CompressParams;
     22 
     23 // RebalanceHistogram requires a signed type.
     24 using ANSHistBin = int32_t;
     25 
     26 struct HistogramParams {
     27  enum class ClusteringType {
     28    kFastest,  // Only 4 clusters.
     29    kFast,
     30    kBest,
     31  };
     32 
     33  enum class HybridUintMethod {
     34    kNone,        // just use kHybridUint420Config.
     35    k000,         // force the fastest option.
     36    kFast,        // just try a couple of options.
     37    kContextMap,  // fast choice for ctx map.
     38    kBest,
     39  };
     40 
     41  enum class LZ77Method {
     42    kNone,     // do not try lz77.
     43    kRLE,      // only try doing RLE.
     44    kLZ77,     // try lz77 with backward references.
     45    kOptimal,  // optimal-matching LZ77 parsing.
     46  };
     47 
     48  enum class ANSHistogramStrategy {
     49    kFast,         // Only try some methods, early exit.
     50    kApproximate,  // Only try some methods.
     51    kPrecise,      // Try all methods.
     52  };
     53 
     54  HistogramParams() = default;
     55 
     56  HistogramParams(SpeedTier tier, size_t num_ctx) {
     57    if (tier > SpeedTier::kFalcon) {
     58      clustering = ClusteringType::kFastest;
     59      lz77_method = LZ77Method::kNone;
     60    } else if (tier > SpeedTier::kTortoise) {
     61      clustering = ClusteringType::kFast;
     62    } else {
     63      clustering = ClusteringType::kBest;
     64    }
     65    if (tier > SpeedTier::kTortoise) {
     66      uint_method = HybridUintMethod::kNone;
     67    }
     68    if (tier >= SpeedTier::kSquirrel) {
     69      ans_histogram_strategy = ANSHistogramStrategy::kApproximate;
     70    }
     71  }
     72 
     73  static HistogramParams ForModular(
     74      const CompressParams& cparams,
     75      const std::vector<uint8_t>& extra_dc_precision, bool streaming_mode);
     76 
     77  ClusteringType clustering = ClusteringType::kBest;
     78  HybridUintMethod uint_method = HybridUintMethod::kBest;
     79  LZ77Method lz77_method = LZ77Method::kRLE;
     80  ANSHistogramStrategy ans_histogram_strategy = ANSHistogramStrategy::kPrecise;
     81  std::vector<size_t> image_widths;
     82  size_t max_histograms = ~0;
     83  bool force_huffman = false;
     84  bool initialize_global_state = true;
     85  bool streaming_mode = false;
     86  bool add_missing_symbols = false;
     87  bool add_fixed_histograms = false;
     88 };
     89 
     90 }  // namespace jxl
     91 
     92 #endif  // LIB_JXL_ENC_ANS_PARAMS_H_