libNeon
Loading...
Searching...
No Matches
gamma.hpp
Go to the documentation of this file.
1//
2// Created by spak on 9/23/21.
3//
4
5#ifndef NEO_GAMMA_H
6#define NEO_GAMMA_H
7
8#include <array>
9#include <map>
10#include <memory>
11#include <mutex>
12
13namespace neo {
14 struct gamma_table {
15 using lut_table_t = std::array<std::uint8_t, std::numeric_limits<std::uint8_t>::max() + 1>;
17
18 gamma_table() = default;
19 inline explicit gamma_table(lut_table_t lut_);
20
21 [[nodiscard]] inline std::uint8_t operator[](std::uint8_t v) const;
22
26 [[nodiscard]] std::uint8_t reverse_lookup(std::uint8_t v) const;
27
32 [[nodiscard]] static gamma_table build(float gamma);
33 };
34
36 std::map<signed, std::unique_ptr<gamma_table>> _gamma_to_table;
38 std::mutex _lookup_mutex;
39
40 [[nodiscard]] signed gamma_to_key(float gamma) const;
41
42 public:
43 static constexpr unsigned default_precision = 2;
44
45 explicit gamma_table_cache(unsigned precision = default_precision);
46
47 [[nodiscard]] gamma_table const &operator[](float gamma);
48 };
49
58 [[nodiscard]] gamma_table const &get_cached_gamma_table(float gamma);
59
60}// namespace neo
61
62namespace neo {
64
65 std::uint8_t gamma_table::operator[](std::uint8_t v) const {
66 return lut[v];
67 }
68}// namespace neo
69
70#endif//NEO_GAMMA_H
Definition: gamma.hpp:35
signed gamma_to_key(float gamma) const
Definition: gamma.cpp:38
std::mutex _lookup_mutex
Definition: gamma.hpp:38
static constexpr unsigned default_precision
Definition: gamma.hpp:43
std::map< signed, std::unique_ptr< gamma_table > > _gamma_to_table
Definition: gamma.hpp:36
gamma_table const & operator[](float gamma)
Definition: gamma.cpp:27
float _gamma_multiplier
Definition: gamma.hpp:37
Definition: any_fx.cpp:7
gamma_table const & get_cached_gamma_table(float gamma)
Definition: gamma.cpp:46
Definition: gamma.hpp:14
std::uint8_t reverse_lookup(std::uint8_t v) const
Definition: gamma.cpp:42
std::uint8_t operator[](std::uint8_t v) const
Definition: gamma.hpp:65
lut_table_t lut
Definition: gamma.hpp:16
std::array< std::uint8_t, std::numeric_limits< std::uint8_t >::max()+1 > lut_table_t
Definition: gamma.hpp:15
gamma_table()=default
static gamma_table build(float gamma)
Definition: gamma.cpp:13