Grok 20.3.2
WaveletCommon.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016-2026 Grok Image Compression Inc.
3 *
4 * This source code is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License, version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This source code is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Affero General Public License for more details.
12 *
13 * You should have received a copy of the GNU Affero General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 */
17
18#pragma once
19
20namespace grk
21{
22
23class dwt53
24{
25public:
26 void encode_v(int32_t* res, int32_t* scratch, uint32_t height, uint8_t parity, uint32_t stride,
27 uint32_t cols, int32_t dcShift = 0, bool intInput = false);
28
29 void encode_h(int32_t* row, int32_t* scratch, uint32_t width, uint8_t parity, uint32_t stride,
30 uint32_t rows, int32_t dcShift = 0);
31};
32
34{
35public:
36 void encode_v(int16_t* res, int16_t* scratch, uint32_t height, uint8_t parity, uint32_t stride,
37 uint32_t cols, int16_t dcShift = 0, bool intInput = false);
38
39 void encode_h(int16_t* row, int16_t* scratch, uint32_t width, uint8_t parity, uint32_t stride,
40 uint32_t rows, int16_t dcShift = 0);
41};
42
43class dwt97
44{
45public:
46 void encode_v(float* res, float* scratch, uint32_t height, uint8_t parity, uint32_t stride,
47 uint32_t cols, float dcShift = 0.0f, bool intInput = false);
48
49 void encode_h(float* row, float* scratch, uint32_t width, uint8_t parity, uint32_t stride,
50 uint32_t rows, float dcShift = 0.0f);
51};
52
54{
55public:
56 // Adapts int32_t template interface to int16_t 9/7 DWT functions.
57 // The template passes int32_t* scratch; we cast to int16_t* internally
58 // (the scratch buffer is large enough since sizeof(int32_t) >= sizeof(int16_t)).
59 void encode_v(int32_t* res, int32_t* scratch, uint32_t height, uint8_t parity, uint32_t stride,
60 uint32_t cols, int32_t dcShift = 0, bool intInput = false);
61
62 void encode_h(int32_t* row, int32_t* scratch, uint32_t width, uint8_t parity, uint32_t stride,
63 uint32_t rows, int32_t dcShift = 0);
64};
65
66template<typename T, size_t N>
67struct vec
68{
69 vec(void) : val{0} {}
70 explicit vec(T m)
71 {
72 for(size_t i = 0; i < N; ++i)
73 val[i] = m;
74 }
75 vec operator+(const vec& rhs)
76 {
77 vec rc;
78 for(size_t i = 0; i < N; ++i)
79 rc.val[i] = val[i] + rhs.val[i];
80
81 return rc;
82 }
83 vec& operator+=(const vec& rhs)
84 {
85 for(size_t i = 0; i < N; ++i)
86 val[i] += rhs.val[i];
87
88 return *this;
89 }
90 vec operator-(const vec& rhs)
91 {
92 vec rc;
93 for(size_t i = 0; i < N; ++i)
94 rc.val[i] = val[i] - rhs.val[i];
95
96 return rc;
97 }
98 vec& operator-=(const vec& rhs)
99 {
100 for(size_t i = 0; i < N; ++i)
101 val[i] -= rhs.val[i];
102
103 return *this;
104 }
105
106 constexpr static size_t NUM_ELTS = N;
107 T val[N];
108};
109
111
112} // namespace grk
Definition WaveletCommon.h:34
void encode_h(int16_t *row, int16_t *scratch, uint32_t width, uint8_t parity, uint32_t stride, uint32_t rows, int16_t dcShift=0)
void encode_v(int16_t *res, int16_t *scratch, uint32_t height, uint8_t parity, uint32_t stride, uint32_t cols, int16_t dcShift=0, bool intInput=false)
Definition WaveletCommon.h:24
void encode_v(int32_t *res, int32_t *scratch, uint32_t height, uint8_t parity, uint32_t stride, uint32_t cols, int32_t dcShift=0, bool intInput=false)
void encode_h(int32_t *row, int32_t *scratch, uint32_t width, uint8_t parity, uint32_t stride, uint32_t rows, int32_t dcShift=0)
Definition WaveletCommon.h:54
void encode_v(int32_t *res, int32_t *scratch, uint32_t height, uint8_t parity, uint32_t stride, uint32_t cols, int32_t dcShift=0, bool intInput=false)
void encode_h(int32_t *row, int32_t *scratch, uint32_t width, uint8_t parity, uint32_t stride, uint32_t rows, int32_t dcShift=0)
Definition WaveletCommon.h:44
void encode_h(float *row, float *scratch, uint32_t width, uint8_t parity, uint32_t stride, uint32_t rows, float dcShift=0.0f)
void encode_v(float *res, float *scratch, uint32_t height, uint8_t parity, uint32_t stride, uint32_t cols, float dcShift=0.0f, bool intInput=false)
ResWindow.
Definition CompressedChunkCache.h:36
vec< float, 4 > vec4f
Definition WaveletCommon.h:110
Definition WaveletCommon.h:68
vec operator+(const vec &rhs)
Definition WaveletCommon.h:75
static constexpr size_t NUM_ELTS
Definition WaveletCommon.h:106
vec & operator+=(const vec &rhs)
Definition WaveletCommon.h:83
vec(void)
Definition WaveletCommon.h:69
vec operator-(const vec &rhs)
Definition WaveletCommon.h:90
vec(T m)
Definition WaveletCommon.h:70
vec & operator-=(const vec &rhs)
Definition WaveletCommon.h:98
float val[N]
Definition WaveletCommon.h:107