Grok 10.0.5
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{
10 public:
11 RoiShiftFilter(DecompressBlockExec* block) : roiShift(block->roishift) {}
12 inline void copy(T* dest, 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
28 private:
29 uint32_t roiShift;
30};
31template<typename T>
33{
34 public:
35 ShiftFilter([[maybe_unused]] DecompressBlockExec* block) {}
36 inline void copy(T* dest, 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{
46 public:
47 RoiScaleFilter(DecompressBlockExec* block)
48 : roiShift(block->roishift), scale(block->stepsize / 2)
49 {}
50 inline void copy(T* dest, T* src, uint32_t len)
51 {
52 T thresh = 1 << roiShift;
53 for(uint32_t i = 0; i < len; ++i)
54 {
55 T val = src[i];
56 T mag = abs(val);
57 if(mag >= thresh)
58 {
59 mag >>= roiShift;
60 val = val < 0 ? -mag : mag;
61 }
62 ((float*)dest)[i] = (float)val * scale;
63 }
64 }
65
66 private:
67 uint32_t roiShift;
68 float scale;
69};
70
71template<typename T>
73{
74 public:
75 ScaleFilter(DecompressBlockExec* block) : scale(block->stepsize / 2) {}
76 inline void copy(T* dest, T* src, uint32_t len)
77 {
78 for(uint32_t i = 0; i < len; ++i)
79 ((float*)dest)[i] = (float)src[i] * scale;
80 }
81
82 private:
83 float scale;
84};
85
86} // namespace grk
float stepsize
Definition BlockExec.h:34
uint32_t len
Definition Codeblock.h:38
uint8_t roishift
Region Of Interest shift.
Definition CodingParams.h:83
T val[N]
Definition WaveletCommon.h:65
Definition PostT1DecompressFilters.h:45
float scale
Definition PostT1DecompressFilters.h:68
uint32_t roiShift
Definition PostT1DecompressFilters.h:67
void copy(T *dest, T *src, uint32_t len)
Definition PostT1DecompressFilters.h:50
RoiScaleFilter(DecompressBlockExec *block)
Definition PostT1DecompressFilters.h:47
Definition PostT1DecompressFilters.h:9
void copy(T *dest, T *src, uint32_t len)
Definition PostT1DecompressFilters.h:12
uint32_t roiShift
Definition PostT1DecompressFilters.h:29
RoiShiftFilter(DecompressBlockExec *block)
Definition PostT1DecompressFilters.h:11
Definition PostT1DecompressFilters.h:73
void copy(T *dest, T *src, uint32_t len)
Definition PostT1DecompressFilters.h:76
float scale
Definition PostT1DecompressFilters.h:83
ScaleFilter(DecompressBlockExec *block)
Definition PostT1DecompressFilters.h:75
Definition PostT1DecompressFilters.h:33
void copy(T *dest, T *src, uint32_t len)
Definition PostT1DecompressFilters.h:36
ShiftFilter(DecompressBlockExec *block)
Definition PostT1DecompressFilters.h:35
Copyright (C) 2016-2023 Grok Image Compression Inc.
Definition ICacheable.h:20