Grok 20.3.2
WaveletReverse.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
20#include "CodecScheduler.h"
21#include "WaveletCommon.h"
22#include "WaveletPoolData.h"
23
24namespace grk
25{
26
28
29template<typename ST>
31{
32 dwt_scratch(void) = default;
33
35 : allocatedMem(nullptr), lenBytes_(0), paddingBytes_(0), mem(nullptr), memL(nullptr),
36 memH(nullptr), sn(rhs.sn), dn(rhs.dn), parity(rhs.parity), win_l(rhs.win_l),
39 {}
41 {
42 release();
43 }
44 bool alloc(size_t len)
45 {
46 return alloc(len, 0);
47 }
48 bool alloc(size_t len, size_t padding)
49 {
50 release();
51
52 /* overflow check */
53 if(len > (SIZE_MAX / sizeof(ST)))
54 {
55 grklog.error("data size overflow");
56 return false;
57 }
58 paddingBytes_ = grk_make_aligned_width<ST>((uint32_t)padding * 2 + 32) * sizeof(ST);
59 lenBytes_ = len * sizeof(ST) + 2 * paddingBytes_;
61 if(!allocatedMem)
62 {
63 grklog.error("Failed to allocate %u bytes", lenBytes_);
64 return false;
65 }
66 ownsData_ = true;
67 mem = allocatedMem + paddingBytes_ / sizeof(ST);
68
69 return (allocatedMem != nullptr) ? true : false;
70 }
71 void clear(void)
72 {
73 if(!allocatedMem)
74 return;
75 memset(allocatedMem, 0, lenBytes_);
76 }
77 void release(void)
78 {
79 if(ownsData_)
81 allocatedMem = nullptr;
82 mem = nullptr;
83 memL = nullptr;
84 memH = nullptr;
85 }
86 ST* allocatedMem = nullptr;
87 size_t lenBytes_ = 0;
88 size_t paddingBytes_ = 0;
89 ST* mem = nullptr;
90 ST* memL = nullptr;
91 ST* memH = nullptr;
92 bool ownsData_ = false;
93 uint32_t sn = 0; /* number of elements in low pass band */
94 uint32_t dn = 0; /* number of elements in high pass band */
95 uint32_t parity = 0; /* 0 = start on even coord, 1 = start on odd coord */
98 uint8_t resno = 0;
99 /* Cascade synthesis: V-DWT output range within the extended stripe.
100 * Only rows [outputStart, outputStart+outputCount) are written. */
101 uint32_t outputStart = 0;
102 uint32_t outputCount = 0;
103};
104
106{
107 int32_t shift = 0;
108 int32_t min = 0;
109 int32_t max = 0;
110 bool enabled = false;
111};
112
114{
115 friend class SchedulerFreebyrd;
116 friend class StripDecompressor;
117
118public:
119 WaveletReverse(CodecScheduler* scheduler, TileComponent* tilec, uint16_t compno, Rect32 window,
120 uint8_t numres, uint8_t qmfbid, uint32_t maxDim, bool wholeTileDecompress,
121 WaveletPoolData* poolData, DcShiftParam dcShift = {},
122 bool cascadeSynthesis = false);
124 bool decompress(void);
125
127
132 static bool allocCascadeScratch97(dwt_scratch<vec4f>& scratch, size_t dataLength);
133
134private:
138 uint16_t compno_ = 0;
140 uint8_t numres_ = 0;
141 uint8_t qmfbid_ = 0;
142 uint32_t maxDim_ = 0;
145
146 // 5/3 ////////////////////////////////////////////////////////////////////////////////////
147 void load_h_p0_53(int32_t* scratch, const uint32_t width, const int32_t* bandL,
148 const int32_t* bandH, int32_t* dest);
149
150 void load_h_p1_53(int32_t* scratch, const uint32_t width, const int32_t* bandL,
151 const int32_t* bandH, int32_t* dest);
152
153 void h_53(uint8_t res, TileComponentWindow<int32_t>* scratch, uint32_t resHeight);
154
155 void h_strip_53(const dwt_scratch<int32_t>* scratch, uint32_t hMin, uint32_t hMax,
158
159 void load_h_53(const dwt_scratch<int32_t>* scratch, int32_t* bandL, int32_t* bandH,
160 int32_t* dest);
161
162 void v_p0_53(int32_t* scratch, const uint32_t height, int32_t* bandL, const uint32_t strideL,
163 int32_t* bandH, const uint32_t strideH, int32_t* dest, const uint32_t strideDest);
164
165 void v_p1_53(int32_t* scratch, const uint32_t height, int32_t* bandL, const uint32_t strideL,
166 int32_t* bandH, const uint32_t strideH, int32_t* dest, const uint32_t strideDest);
167
169 Buffer2dSimple<int32_t> winH, Buffer2dSimple<int32_t> winDest, uint32_t nb_cols,
170 DcShiftParam dcShift);
171
172 void v_strip_53(const dwt_scratch<int32_t>* scratch, uint32_t wMin, uint32_t wMax,
174 Buffer2dSimple<int32_t> winDest, DcShiftParam dcShift);
175
176 void v_53(uint8_t res, TileComponentWindow<int32_t>* buf, uint32_t resWidth);
177
178 bool tile_53(void);
179
182 std::unique_ptr<dwt_scratch<int32_t>[]> horizPool_;
183 std::unique_ptr<dwt_scratch<int32_t>[]> vertPool_;
184
185 // 16-bit 5/3 //////////////////////////////////////////////////////////////////////////////
186 void load_h_p0_16_53(int16_t* scratch, const uint32_t width, const int16_t* bandL,
187 const int16_t* bandH, int16_t* dest);
188
189 void load_h_p1_16_53(int16_t* scratch, const uint32_t width, const int16_t* bandL,
190 const int16_t* bandH, int16_t* dest);
191
192 void load_h_16_53(const dwt_scratch<int16_t>* scratch, int16_t* bandL, int16_t* bandH,
193 int16_t* dest);
194
195 void h_strip_16_53(const dwt_scratch<int16_t>* scratch, uint32_t hMin, uint32_t hMax,
198
199 void h_16_53(uint8_t res, TileComponentWindow<int16_t>* scratch, uint32_t resHeight);
200
201 void v_p0_16_53(int16_t* scratch, const uint32_t height, int16_t* bandL, const uint32_t strideL,
202 int16_t* bandH, const uint32_t strideH, int16_t* dest, const uint32_t strideDest);
203
204 void v_p1_16_53(int16_t* scratch, const uint32_t height, int16_t* bandL, const uint32_t strideL,
205 int16_t* bandH, const uint32_t strideH, int16_t* dest, const uint32_t strideDest);
206
208 Buffer2dSimple<int16_t> winH, Buffer2dSimple<int16_t> winDest, uint32_t nb_cols,
209 DcShiftParam dcShift);
210
211 void v_strip_16_53(const dwt_scratch<int16_t>* scratch, uint32_t wMin, uint32_t wMax,
213 Buffer2dSimple<int16_t> winDest, DcShiftParam dcShift);
214
215 void v_16_53(uint8_t res, TileComponentWindow<int16_t>* buf, uint32_t resWidth);
216
217 bool tile_16_53(void);
218
219 // 16-bit fixed-point 9/7 //////////////////////////////////////////////////////////////////
220 void h_strip_16_97(const dwt_scratch<int16_t>* scratch, uint32_t hMin, uint32_t hMax,
223
224 void h_16_97(uint8_t res, TileComponentWindow<int16_t>* scratch, uint32_t resHeight);
225
227 Buffer2dSimple<int16_t> winH, Buffer2dSimple<int16_t> winDest, uint32_t nb_cols,
228 DcShiftParam dcShift);
229
230 void v_strip_16_97(const dwt_scratch<int16_t>* scratch, uint32_t wMin, uint32_t wMax,
232 Buffer2dSimple<int16_t> winDest, DcShiftParam dcShift);
233
234 void v_16_97(uint8_t res, TileComponentWindow<int16_t>* buf, uint32_t resWidth);
235
236 bool tile_16_97(void);
237
240 std::unique_ptr<dwt_scratch<int16_t>[]> horizPool16_;
241 std::unique_ptr<dwt_scratch<int16_t>[]> vertPool16_;
242
244 // 9/7
245
246 void h_strip_97(dwt_scratch<vec4f>* GRK_RESTRICT horiz, const uint32_t resHeight,
248 Buffer2dSimple<float> winDest);
249
250 bool h_97(uint8_t res, uint32_t num_threads, size_t dataLength,
251 dwt_scratch<vec4f>& GRK_RESTRICT horiz, const uint32_t resHeight,
253
254 void v_strip_97(dwt_scratch<vec4f>* GRK_RESTRICT vert, const uint32_t resWidth,
255 const uint32_t resHeight, Buffer2dSimple<float> winL, Buffer2dSimple<float> winH,
256 Buffer2dSimple<float> winDest, DcShiftParam dcShift);
257
258 bool v_97(uint8_t res, uint32_t num_threads, size_t dataLength,
259 dwt_scratch<vec4f>& GRK_RESTRICT vert, const uint32_t resWidth,
260 const uint32_t resHeight, Buffer2dSimple<float> winL, Buffer2dSimple<float> winH,
261 Buffer2dSimple<float> winDest);
262
263 // ======================== Cascade synthesis ========================
264 //
265 // Stripe-based combined H+V 9/7 inverse DWT. Instead of the traditional
266 // two-phase approach (H-DWT entire image → sync → V-DWT entire image),
267 // cascade synthesis divides the image into horizontal stripes of ~64
268 // interleaved rows and processes each stripe through both H and V in
269 // one pass. This keeps intermediate data hot in L2/L3 cache, avoiding
270 // the DRAM round-trip that occurs when the full-resolution SPLIT buffers
271 // (potentially tens of MB for 4K+ images) are cold by the time the
272 // V-DWT reads them.
273 //
274 // Each stripe includes a halo of ±4 sub-band rows (8 interleaved rows)
275 // to provide context for the 9/7 V-DWT lifting steps at stripe
276 // boundaries. The halo introduces ~12% redundant H-DWT work, but this
277 // is offset by the elimination of SPLIT buffer cache misses.
278 //
279 // Opt-in: set GRK_CASCADE_DWT=1 environment variable. Output is
280 // bit-exact with the traditional path.
281 //
282 // Architecture:
283 // tile_97_cascade - per-resolution loop (replaces tile_97)
284 // cascade_97 - scheduling: splits image into stripes, creates tasks
285 // cascade_strip_97 - per-stripe kernel: H-DWT + V-DWT + output
286 // hwy_v_cascade_stripe_97 - SIMD V-DWT with partial row output
287
288 // Per-stripe cascade kernel. H-DWT for both sub-band pairs (LL+HL, LH+HH)
289 // into task-local buffers, then V-DWT with partial output (central rows only,
290 // halo rows are lifted but not written).
292 dwt_scratch<vec4f>* GRK_RESTRICT vScratch, const uint32_t resWidth,
295 Buffer2dSimple<float> winDest, DcShiftParam dcShift);
296
297 // Schedule cascade tasks for one resolution level. Divides resHeight into
298 // 64-row interleaved stripes with 8-row halo. Each task processes one or
299 // more stripes. Tasks are scheduled into waveletHoriz_ (waveletVert_ is
300 // unused in cascade mode). Stripe tasks write to tempDest; a final copy-back
301 // task (also in waveletHoriz_, with .precede() dependencies) copies results
302 // to realDest. This avoids aliasing because sub-band inputs (LL, HL, LH, HH)
303 // share memory with realDest in whole-tile mode.
304 bool cascade_97(uint8_t res, uint32_t num_threads, size_t dataLength,
306 dwt_scratch<vec4f>& GRK_RESTRICT vScratch, const uint32_t resWidth,
307 const uint32_t resHeight, Buffer2dSimple<float> winLL,
310 Buffer2dSimple<float> realDest, std::shared_ptr<std::vector<float>> tempBufMem);
311
312 // Entry point for cascade 9/7 inverse DWT (replaces tile_97 when enabled).
313 bool tile_97_cascade(void);
314
315 bool tile_97(void);
316
319 dwt_scratch<vec4f> cascade97_h; // H-DWT scratch for cascade synthesis
320 dwt_scratch<vec4f> cascade97_v; // V-DWT scratch for cascade synthesis
321
322 // When true, use cascade (stripe-based combined H+V) DWT instead of the
323 // traditional two-phase approach. Controlled by GRK_CASCADE_DWT env var.
324 bool cascadeSynthesis_ = false;
326
328 // partial
329 bool decompressPartial();
330
331 template<typename T, typename S>
357
358 template<typename ST, uint32_t FILTER_WIDTH, uint32_t VERT_PASS_WIDTH, typename D>
360 std::vector<PartialTaskInfo<ST, dwt_scratch<ST>>*>& tasks);
361
362 // partial 5/3
363 std::vector<PartialTaskInfo<int32_t, dwt_scratch<int32_t>>*> partialTasks53_;
364
365 // partial 9/7
366 std::vector<PartialTaskInfo<vec4f, dwt_scratch<vec4f>>*> partialTasks97_;
368};
369
370} // namespace grk
#define GRK_RESTRICT
Definition CodingParams.cpp:32
#define SIZE_MAX
Definition MemManager.h:37
#define S(buf, i)
An abstract class that can execute T1 phase of codec by running a tf::Executor.
Definition CodecScheduler.h:72
Definition ISparseCanvas.h:42
Stub — freebyrd thread pool has been removed.
Definition SchedulerFreebyrd.h:48
Per-image pool of per-thread scratch buffers for the 5/3 wavelet.
Definition WaveletPoolData.h:40
uint16_t compno_
Definition WaveletReverse.h:138
std::unique_ptr< dwt_scratch< int32_t >[]> horizPool_
Definition WaveletReverse.h:182
bool cascadeSynthesis_
Definition WaveletReverse.h:324
void v_53(uint8_t res, TileComponentWindow< int32_t > *buf, uint32_t resWidth)
dwt_scratch< vec4f > cascade97_h
Definition WaveletReverse.h:319
void v_16_53(uint8_t res, TileComponentWindow< int16_t > *buf, uint32_t resWidth)
void h_strip_16_53(const dwt_scratch< int16_t > *scratch, uint32_t hMin, uint32_t hMax, Buffer2dSimple< int16_t > winL, Buffer2dSimple< int16_t > winH, Buffer2dSimple< int16_t > winDest)
dwt_scratch< int32_t > horiz_
Definition WaveletReverse.h:180
void v_p1_53(int32_t *scratch, const uint32_t height, int32_t *bandL, const uint32_t strideL, int32_t *bandH, const uint32_t strideH, int32_t *dest, const uint32_t strideDest)
bool partial_tile(ISparseCanvas< int32_t > *sa, std::vector< PartialTaskInfo< ST, dwt_scratch< ST > > * > &tasks)
WaveletReverse(CodecScheduler *scheduler, TileComponent *tilec, uint16_t compno, Rect32 window, uint8_t numres, uint8_t qmfbid, uint32_t maxDim, bool wholeTileDecompress, WaveletPoolData *poolData, DcShiftParam dcShift={}, bool cascadeSynthesis=false)
void h_53(uint8_t res, TileComponentWindow< int32_t > *scratch, uint32_t resHeight)
bool h_97(uint8_t res, uint32_t num_threads, size_t dataLength, dwt_scratch< vec4f > &GRK_RESTRICT horiz, const uint32_t resHeight, Buffer2dSimple< float > winL, Buffer2dSimple< float > winH, Buffer2dSimple< float > winDest)
dwt_scratch< vec4f > vert97
Definition WaveletReverse.h:318
void load_h_p1_53(int32_t *scratch, const uint32_t width, const int32_t *bandL, const int32_t *bandH, int32_t *dest)
bool wholeTileDecompress_
Definition WaveletReverse.h:143
void v_p0_16_53(int16_t *scratch, const uint32_t height, int16_t *bandL, const uint32_t strideL, int16_t *bandH, const uint32_t strideH, int16_t *dest, const uint32_t strideDest)
CodecScheduler * scheduler_
Definition WaveletReverse.h:136
dwt_scratch< vec4f > cascade97_v
Definition WaveletReverse.h:320
bool tile_97_cascade(void)
void v_16_97(uint8_t res, TileComponentWindow< int16_t > *buf, uint32_t resWidth)
dwt_scratch< int32_t > vert_
Definition WaveletReverse.h:181
void load_h_53(const dwt_scratch< int32_t > *scratch, int32_t *bandL, int32_t *bandH, int32_t *dest)
std::unique_ptr< dwt_scratch< int16_t >[]> horizPool16_
Definition WaveletReverse.h:240
uint8_t numres_
Definition WaveletReverse.h:140
dwt_scratch< int16_t > horiz16_
Definition WaveletReverse.h:238
void h_strip_16_97(const dwt_scratch< int16_t > *scratch, uint32_t hMin, uint32_t hMax, Buffer2dSimple< int16_t > winL, Buffer2dSimple< int16_t > winH, Buffer2dSimple< int16_t > winDest)
void load_h_p0_16_53(int16_t *scratch, const uint32_t width, const int16_t *bandL, const int16_t *bandH, int16_t *dest)
static void step_97(dwt_scratch< vec4f > *GRK_RESTRICT dwt)
Rect32 unreducedWindow_
Definition WaveletReverse.h:139
uint8_t qmfbid_
Definition WaveletReverse.h:141
void load_h_p0_53(int32_t *scratch, const uint32_t width, const int32_t *bandL, const int32_t *bandH, int32_t *dest)
void v_p1_16_53(int16_t *scratch, const uint32_t height, int16_t *bandL, const uint32_t strideL, int16_t *bandH, const uint32_t strideH, int16_t *dest, const uint32_t strideDest)
std::vector< PartialTaskInfo< int32_t, dwt_scratch< int32_t > > * > partialTasks53_
Definition WaveletReverse.h:363
bool tile_16_97(void)
void v_53(const dwt_scratch< int32_t > *scratch, Buffer2dSimple< int32_t > winL, Buffer2dSimple< int32_t > winH, Buffer2dSimple< int32_t > winDest, uint32_t nb_cols, DcShiftParam dcShift)
void h_16_53(uint8_t res, TileComponentWindow< int16_t > *scratch, uint32_t resHeight)
bool decompress(void)
bool v_97(uint8_t res, uint32_t num_threads, size_t dataLength, dwt_scratch< vec4f > &GRK_RESTRICT vert, const uint32_t resWidth, const uint32_t resHeight, Buffer2dSimple< float > winL, Buffer2dSimple< float > winH, Buffer2dSimple< float > winDest)
void v_strip_53(const dwt_scratch< int32_t > *scratch, uint32_t wMin, uint32_t wMax, Buffer2dSimple< int32_t > winL, Buffer2dSimple< int32_t > winH, Buffer2dSimple< int32_t > winDest, DcShiftParam dcShift)
std::unique_ptr< dwt_scratch< int32_t >[]> vertPool_
Definition WaveletReverse.h:183
void load_h_p1_16_53(int16_t *scratch, const uint32_t width, const int16_t *bandL, const int16_t *bandH, int16_t *dest)
dwt_scratch< vec4f > horiz97
Definition WaveletReverse.h:317
void v_p0_53(int32_t *scratch, const uint32_t height, int32_t *bandL, const uint32_t strideL, int32_t *bandH, const uint32_t strideH, int32_t *dest, const uint32_t strideDest)
static bool allocCascadeScratch97(dwt_scratch< vec4f > &scratch, size_t dataLength)
Allocate DWT scratch buffer with platform-appropriate size for 9/7.
WaveletPoolData * poolData_
Definition WaveletReverse.h:135
bool tile_16_53(void)
void v_strip_16_53(const dwt_scratch< int16_t > *scratch, uint32_t wMin, uint32_t wMax, Buffer2dSimple< int16_t > winL, Buffer2dSimple< int16_t > winH, Buffer2dSimple< int16_t > winDest, DcShiftParam dcShift)
bool cascade_97(uint8_t res, uint32_t num_threads, size_t dataLength, dwt_scratch< vec4f > &GRK_RESTRICT hScratch, dwt_scratch< vec4f > &GRK_RESTRICT vScratch, const uint32_t resWidth, const uint32_t resHeight, Buffer2dSimple< float > winLL, Buffer2dSimple< float > winHL, Buffer2dSimple< float > winLH, Buffer2dSimple< float > winHH, Buffer2dSimple< float > tempDest, Buffer2dSimple< float > realDest, std::shared_ptr< std::vector< float > > tempBufMem)
uint32_t maxDim_
Definition WaveletReverse.h:142
void v_strip_16_97(const dwt_scratch< int16_t > *scratch, uint32_t wMin, uint32_t wMax, Buffer2dSimple< int16_t > winL, Buffer2dSimple< int16_t > winH, Buffer2dSimple< int16_t > winDest, DcShiftParam dcShift)
void v_16_53(const dwt_scratch< int16_t > *scratch, Buffer2dSimple< int16_t > winL, Buffer2dSimple< int16_t > winH, Buffer2dSimple< int16_t > winDest, uint32_t nb_cols, DcShiftParam dcShift)
void v_strip_97(dwt_scratch< vec4f > *GRK_RESTRICT vert, const uint32_t resWidth, const uint32_t resHeight, Buffer2dSimple< float > winL, Buffer2dSimple< float > winH, Buffer2dSimple< float > winDest, DcShiftParam dcShift)
DcShiftParam dcShift_
Definition WaveletReverse.h:144
friend class StripDecompressor
Definition WaveletReverse.h:116
void h_16_97(uint8_t res, TileComponentWindow< int16_t > *scratch, uint32_t resHeight)
TileComponent * tilec_
Definition WaveletReverse.h:137
void cascade_strip_97(dwt_scratch< vec4f > *GRK_RESTRICT hScratch, dwt_scratch< vec4f > *GRK_RESTRICT vScratch, const uint32_t resWidth, Buffer2dSimple< float > winLL, Buffer2dSimple< float > winHL, Buffer2dSimple< float > winLH, Buffer2dSimple< float > winHH, Buffer2dSimple< float > winDest, DcShiftParam dcShift)
std::vector< PartialTaskInfo< vec4f, dwt_scratch< vec4f > > * > partialTasks97_
Definition WaveletReverse.h:366
bool decompressPartial()
Definition WaveletReversePartial.cpp:802
void h_strip_53(const dwt_scratch< int32_t > *scratch, uint32_t hMin, uint32_t hMax, Buffer2dSimple< int32_t > winL, Buffer2dSimple< int32_t > winH, Buffer2dSimple< int32_t > winDest)
void load_h_16_53(const dwt_scratch< int16_t > *scratch, int16_t *bandL, int16_t *bandH, int16_t *dest)
dwt_scratch< int16_t > vert16_
Definition WaveletReverse.h:239
void h_strip_97(dwt_scratch< vec4f > *GRK_RESTRICT horiz, const uint32_t resHeight, Buffer2dSimple< float > winL, Buffer2dSimple< float > winH, Buffer2dSimple< float > winDest)
void v_16_97(const dwt_scratch< int16_t > *scratch, Buffer2dSimple< int16_t > winL, Buffer2dSimple< int16_t > winH, Buffer2dSimple< int16_t > winDest, uint32_t nb_cols, DcShiftParam dcShift)
friend class SchedulerFreebyrd
Definition WaveletReverse.h:115
std::unique_ptr< dwt_scratch< int16_t >[]> vertPool16_
Definition WaveletReverse.h:241
ResWindow.
Definition CompressedChunkCache.h:36
void * grk_aligned_malloc(size_t bytes)
Definition MemManager.h:308
ILogger & grklog
Definition Logger.cpp:24
Line< uint32_t > Line32
Definition geometry.h:60
Rect< uint32_t > Rect32
Definition geometry.h:64
uint32_t grk_make_aligned_width(uint32_t width)
Definition MemManager.h:46
void grk_aligned_free(void *ptr)
Definition MemManager.h:324
Definition buffer.h:262
Definition WaveletReverse.h:106
int32_t min
Definition WaveletReverse.h:108
int32_t max
Definition WaveletReverse.h:109
int32_t shift
Definition WaveletReverse.h:107
bool enabled
Definition WaveletReverse.h:110
Stores sub-sampled, unreduced tile component dimensions, along with reduction information.
Definition TileComponent.h:37
Definition TileComponentWindow.h:197
Definition WaveletReverse.h:333
Buffer2dSimple< T > winHH
Definition WaveletReverse.h:351
~PartialTaskInfo(void)
Definition WaveletReverse.h:343
PartialTaskInfo(S data, uint32_t indexMin, uint32_t indexMax)
Definition WaveletReverse.h:340
uint32_t indexMax_
Definition WaveletReverse.h:355
Buffer2dSimple< T > winLL
Definition WaveletReverse.h:348
PartialTaskInfo(S data, Buffer2dSimple< T > winLL, Buffer2dSimple< T > winHL, Buffer2dSimple< T > winLH, Buffer2dSimple< T > winHH, Buffer2dSimple< T > winDest, uint32_t indexMin, uint32_t indexMax)
Definition WaveletReverse.h:334
uint32_t indexMin_
Definition WaveletReverse.h:354
Buffer2dSimple< T > winHL
Definition WaveletReverse.h:349
S data
Definition WaveletReverse.h:347
Buffer2dSimple< T > winDest
Definition WaveletReverse.h:352
Buffer2dSimple< T > winLH
Definition WaveletReverse.h:350
Definition WaveletReverse.h:31
uint32_t outputCount
Definition WaveletReverse.h:102
uint8_t resno
Definition WaveletReverse.h:98
bool ownsData_
Definition WaveletReverse.h:92
ST * memL
Definition WaveletReverse.h:90
size_t paddingBytes_
Definition WaveletReverse.h:88
void clear(void)
Definition WaveletReverse.h:71
uint32_t outputStart
Definition WaveletReverse.h:101
dwt_scratch(void)=default
ST * allocatedMem
Definition WaveletReverse.h:86
Line32 win_h
Definition WaveletReverse.h:97
~dwt_scratch(void)
Definition WaveletReverse.h:40
uint32_t parity
Definition WaveletReverse.h:95
dwt_scratch(const dwt_scratch &rhs)
Definition WaveletReverse.h:34
size_t lenBytes_
Definition WaveletReverse.h:87
uint32_t dn
Definition WaveletReverse.h:94
uint32_t sn
Definition WaveletReverse.h:93
Line32 win_l
Definition WaveletReverse.h:96
bool alloc(size_t len, size_t padding)
Definition WaveletReverse.h:48
ST * mem
Definition WaveletReverse.h:89
void release(void)
Definition WaveletReverse.h:77
bool alloc(size_t len)
Definition WaveletReverse.h:44
ST * memH
Definition WaveletReverse.h:91