Coverage Report

Created: 2025-06-16 07:00

/src/libjxl/lib/jxl/enc_dot_dictionary.cc
Line
Count
Source (jump to first uncovered line)
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
#include "lib/jxl/enc_dot_dictionary.h"
7
8
#include <array>
9
#include <cstddef>
10
#include <cstring>
11
#include <vector>
12
13
#include "lib/jxl/base/data_parallel.h"
14
#include "lib/jxl/base/override.h"
15
#include "lib/jxl/base/rect.h"
16
#include "lib/jxl/base/status.h"
17
#include "lib/jxl/chroma_from_luma.h"
18
#include "lib/jxl/enc_detect_dots.h"
19
#include "lib/jxl/enc_params.h"
20
#include "lib/jxl/enc_patch_dictionary.h"
21
#include "lib/jxl/image.h"
22
23
namespace jxl {
24
25
// Private implementation of Dictionary Encode/Decode
26
namespace {
27
28
/* Quantization constants for Ellipse dots */
29
const size_t kEllipsePosQ = 2;        // Quantization level for the position
30
const double kEllipseMinSigma = 0.1;  // Minimum sigma value
31
const double kEllipseMaxSigma = 3.1;  // Maximum Sigma value
32
const size_t kEllipseSigmaQ = 16;     // Number of quantization levels for sigma
33
const size_t kEllipseAngleQ = 8;      // Quantization level for the angle
34
// TODO(user): fix these values.
35
const std::array<double, 3> kEllipseMinIntensity{{-0.05, 0.0, -0.5}};
36
const std::array<double, 3> kEllipseMaxIntensity{{0.05, 1.0, 0.4}};
37
const std::array<size_t, 3> kEllipseIntensityQ{{10, 36, 10}};
38
}  // namespace
39
40
StatusOr<std::vector<PatchInfo>> FindDotDictionary(
41
    const CompressParams& cparams, const Image3F& opsin, const Rect& rect,
42
0
    const ColorCorrelation& color_correlation, ThreadPool* pool) {
43
0
  if (ApplyOverride(cparams.dots,
44
0
                    cparams.butteraugli_distance >= kMinButteraugliForDots)) {
45
0
    GaussianDetectParams ellipse_params;
46
0
    ellipse_params.t_high = 0.04;
47
0
    ellipse_params.t_low = 0.02;
48
0
    ellipse_params.maxWinSize = 5;
49
0
    ellipse_params.maxL2Loss = 0.005;
50
0
    ellipse_params.maxCustomLoss = 300;
51
0
    ellipse_params.minIntensity = 0.12;
52
0
    ellipse_params.maxDistMeanMode = 1.0;
53
0
    ellipse_params.maxNegPixels = 0;
54
0
    ellipse_params.minScore = 12.0;
55
0
    ellipse_params.maxCC = 100;
56
0
    ellipse_params.percCC = 100;
57
0
    EllipseQuantParams qParams{rect.xsize(),
58
0
                               rect.ysize(),
59
0
                               kEllipsePosQ,
60
0
                               kEllipseMinSigma,
61
0
                               kEllipseMaxSigma,
62
0
                               kEllipseSigmaQ,
63
0
                               kEllipseAngleQ,
64
0
                               kEllipseMinIntensity,
65
0
                               kEllipseMaxIntensity,
66
0
                               kEllipseIntensityQ,
67
0
                               kEllipsePosQ <= 5,
68
0
                               color_correlation.YtoXRatio(0),
69
0
                               color_correlation.YtoBRatio(0)};
70
71
0
    return DetectGaussianEllipses(opsin, rect, ellipse_params, qParams, pool);
72
0
  }
73
0
  std::vector<PatchInfo> nothing;
74
0
  return nothing;
75
0
}
76
}  // namespace jxl