Grok 15.1.0
PostT1DecompressFilters.h
Go to the documentation of this file.
1#pragma once
2
3#include "grk_includes.h"
4
5namespace grk
6{
7template<typename T>
9{
10public:
11 RoiShiftFilter(DecompressBlockExec* block) : roiShift(block->roishift) {}
12 inline void copy(T* dest, const T* src, uint32_t len)
13 {
14 T thresh = 1 << roiShift;
15 for(uint32_t i = 0; i < len; ++i)
16 {
17 T val = src[i];
18 T mag = abs(val);
19 if(mag >= thresh)
20 {
21 mag >>= roiShift;
22 val = val < 0 ? -mag : mag;
23 }
24 dest[i] = val / 2;
25 }
26 }
27
28private:
29 uint32_t roiShift;
30};
31template<typename T>
33{
34public:
35 ShiftFilter([[maybe_unused]] DecompressBlockExec* block) {}
36 inline void copy(T* dest, const T* src, uint32_t len)
37 {
38 for(uint32_t i = 0; i < len; ++i)
39 dest[i] = src[i] / 2;
40 }
41};
42
43template<typename T>
45{
46public:
47 RoiScaleFilter(DecompressBlockExec* block) : roiShift(block->roishift), scale(block->stepsize / 2)
48 {}
49 inline void copy(T* dest, const T* src, uint32_t len)
50 {
51 T thresh = 1 << roiShift;
52 for(uint32_t i = 0; i < len; ++i)
53 {
54 T val = src[i];
55 T mag = abs(val);
56 if(mag >= thresh)
57 {
58 mag >>= roiShift;
59 val = val < 0 ? -mag : mag;
60 }
61 ((float*)dest)[i] = (float)val * scale;
62 }
63 }
64
65private:
66 uint32_t roiShift;
67 float scale;
68};
69
70template<typename T>
72{
73public:
74 ScaleFilter(DecompressBlockExec* block) : scale(block->stepsize / 2) {}
75 inline void copy(T* dest, const T* src, uint32_t len)
76 {
77 for(uint32_t i = 0; i < len; ++i)
78 ((float*)dest)[i] = (float)src[i] * scale;
79 }
80
81private:
82 float scale;
83};
84
85} // namespace grk
float scale
Definition PostT1DecompressFilters.h:67
uint32_t roiShift
Definition PostT1DecompressFilters.h:66
RoiScaleFilter(DecompressBlockExec *block)
Definition PostT1DecompressFilters.h:47
void copy(T *dest, const T *src, uint32_t len)
Definition PostT1DecompressFilters.h:49
void copy(T *dest, const T *src, uint32_t len)
Definition PostT1DecompressFilters.h:12
uint32_t roiShift
Definition PostT1DecompressFilters.h:29
RoiShiftFilter(DecompressBlockExec *block)
Definition PostT1DecompressFilters.h:11
void copy(T *dest, const T *src, uint32_t len)
Definition PostT1DecompressFilters.h:75
float scale
Definition PostT1DecompressFilters.h:82
ScaleFilter(DecompressBlockExec *block)
Definition PostT1DecompressFilters.h:74
void copy(T *dest, const T *src, uint32_t len)
Definition PostT1DecompressFilters.h:36
ShiftFilter(DecompressBlockExec *block)
Definition PostT1DecompressFilters.h:35
Copyright (C) 2016-2025 Grok Image Compression Inc.
Definition ICacheable.h:20
Definition BlockExec.h:45