Grok  7.6.6
PostDecompressFilters.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "grk_includes.h"
4 
5 namespace grk {
6 
7 
8 template<typename T> class RoiShiftFilter {
9 public:
10  RoiShiftFilter(DecompressBlockExec *block) : roiShift(block->roishift){}
11  inline void copy(T* dest,T* src, uint32_t len){
12  T thresh = 1 << roiShift;
13  for (uint32_t i = 0; i < len; ++i){
14  T val = src[i];
15  T mag = abs(val);
16  if (mag >= thresh) {
17  mag >>= roiShift;
18  val = val < 0 ? -mag : mag;
19  }
20  dest[i] = val/2;
21  }
22  }
23 private:
24  uint32_t roiShift;
25 };
26 template<typename T> class ShiftFilter {
27 public:
29  (void)block;
30  }
31  inline void copy(T* dest,T* src, uint32_t len){
32  for (uint32_t i = 0; i < len; ++i)
33  dest[i] = src[i]/2;
34  }
35 };
36 
37 
38 template<typename T> class RoiScaleFilter {
39 public:
40  RoiScaleFilter(DecompressBlockExec *block) : roiShift(block->roishift),
41  scale(block->stepsize/2)
42  {}
43  inline void copy(T* dest,T* src, uint32_t len){
44  T thresh = 1 << roiShift;
45  for (uint32_t i = 0; i < len; ++i){
46  T val = src[i];
47  T mag = abs(val);
48  if (mag >= thresh) {
49  mag >>= roiShift;
50  val = val < 0 ? -mag : mag;
51  }
52  ((float*)dest)[i] = (float)val * scale;
53  }
54  }
55 private:
56  uint32_t roiShift;
57  float scale;
58 };
59 
60 template<typename T> class ScaleFilter {
61 public:
62  ScaleFilter(DecompressBlockExec *block) : scale(block->stepsize/2)
63  {}
64  inline void copy(T* dest,T* src, uint32_t len){
65  for (uint32_t i = 0; i < len; ++i){
66  ((float*)dest)[i] = (float)src[i] * scale;
67  }
68  }
69 private:
70  float scale;
71 };
72 
73 
74 template<typename T> class RoiShiftHTFilter {
75 public:
76  RoiShiftHTFilter(DecompressBlockExec *block) : roiShift(block->roishift),
77  shift(31 - (block->k_msbs + 1))
78  {}
79  inline void copy(T* dest,T* src, uint32_t len){
80  T thresh = 1 << roiShift;
81  for (uint32_t i = 0; i < len; ++i){
82  T val = src[i];
83  T mag = (val & 0x7FFFFFFF);
84  if (mag >= thresh)
85  val = (T)(((uint32_t)mag >> roiShift) & ((uint32_t)val & 0x80000000));
86  int32_t val_shifted = (val & 0x7FFFFFFF) >> shift;
87  dest[i] = (int32_t)(((uint32_t)val & 0x80000000) ? -val_shifted : val_shifted);
88  }
89  }
90 private:
91  uint32_t roiShift;
92  uint32_t shift;
93 };
94 template<typename T> class ShiftHTFilter {
95 public:
96  ShiftHTFilter(DecompressBlockExec *block) : shift(31 - (block->k_msbs + 1)){}
97  inline void copy(T* dest,T* src, uint32_t len){
98  for (uint32_t i = 0; i < len; ++i){
99  T val = src[i];
100  T val_shifted = (val & 0x7FFFFFFF) >> shift;
101  dest[i] = (T)(((uint32_t)val & 0x80000000) ? -val_shifted : val_shifted);
102  }
103  }
104 private:
105  uint32_t shift;
106 };
107 
108 template<typename T> class RoiScaleHTFilter {
109 public:
110  RoiScaleHTFilter(DecompressBlockExec *block) : roiShift(block->roishift), scale(block->stepsize) {}
111  inline void copy(T* dest,T* src, uint32_t len){
112  T thresh = 1 << roiShift;
113  for (uint32_t i = 0; i < len; ++i){
114  T val = src[i];
115  T mag = (T)(val & 0x7FFFFFFF);
116  if (mag >= thresh)
117  val = (T)(((uint32_t)mag >> roiShift) & ((uint32_t)val & 0x80000000));
118  float val_scaled = (float)(val & 0x7FFFFFFF) * scale;
119  ((float*)dest)[i] = ((uint32_t)val & 0x80000000) ? -val_scaled : val_scaled;
120  }
121  }
122 private:
123  uint32_t roiShift;
124  float scale;
125 };
126 
127 
128 template<typename T> class ScaleHTFilter {
129 public:
130  ScaleHTFilter(DecompressBlockExec *block) : scale(block->stepsize) {}
131  inline void copy(T* dest,T* src, uint32_t len){
132  for (uint32_t i = 0; i < len; ++i){
133  int32_t val = src[i];
134  float val_scaled = (float)(val & 0x7FFFFFFF) * scale;
135  ((float*)dest)[i] = ((uint32_t)val & 0x80000000) ? -val_scaled : val_scaled;
136  }
137  }
138 private:
139  float scale;
140 };
141 
142 }
Definition: PostDecompressFilters.h:38
float scale
Definition: PostDecompressFilters.h:57
uint32_t roiShift
Definition: PostDecompressFilters.h:56
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:43
RoiScaleFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:40
Definition: PostDecompressFilters.h:108
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:111
float scale
Definition: PostDecompressFilters.h:124
RoiScaleHTFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:110
uint32_t roiShift
Definition: PostDecompressFilters.h:123
Definition: PostDecompressFilters.h:8
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:11
uint32_t roiShift
Definition: PostDecompressFilters.h:24
RoiShiftFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:10
Definition: PostDecompressFilters.h:74
uint32_t roiShift
Definition: PostDecompressFilters.h:91
RoiShiftHTFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:76
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:79
uint32_t shift
Definition: PostDecompressFilters.h:92
Definition: PostDecompressFilters.h:60
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:64
float scale
Definition: PostDecompressFilters.h:70
ScaleFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:62
Definition: PostDecompressFilters.h:128
ScaleHTFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:130
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:131
float scale
Definition: PostDecompressFilters.h:139
Definition: PostDecompressFilters.h:26
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:31
ShiftFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:28
Definition: PostDecompressFilters.h:94
uint32_t shift
Definition: PostDecompressFilters.h:105
ShiftHTFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:96
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:97
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: BitIO.cpp:23
Definition: T1Structs.h:268