Grok  7.6.3
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 }
grk::RoiScaleFilter::RoiScaleFilter
RoiScaleFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:40
grk::ScaleHTFilter::scale
float scale
Definition: PostDecompressFilters.h:139
grk::RoiScaleHTFilter::copy
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:111
grk::RoiShiftFilter
Definition: PostDecompressFilters.h:8
grk::ScaleFilter::scale
float scale
Definition: PostDecompressFilters.h:70
grk::ScaleFilter::copy
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:64
grk::ScaleHTFilter::ScaleHTFilter
ScaleHTFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:130
grk::ShiftFilter::ShiftFilter
ShiftFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:28
grk::ScaleHTFilter
Definition: PostDecompressFilters.h:128
grk::RoiScaleFilter::copy
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:43
grk::RoiScaleHTFilter::roiShift
uint32_t roiShift
Definition: PostDecompressFilters.h:123
grk::RoiScaleHTFilter::RoiScaleHTFilter
RoiScaleHTFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:110
grk::RoiShiftHTFilter::roiShift
uint32_t roiShift
Definition: PostDecompressFilters.h:91
grk::ShiftHTFilter::ShiftHTFilter
ShiftHTFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:96
grk::RoiShiftHTFilter::copy
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:79
grk::ScaleFilter::ScaleFilter
ScaleFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:62
grk::RoiScaleHTFilter
Definition: PostDecompressFilters.h:108
grk::RoiShiftFilter::RoiShiftFilter
RoiShiftFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:10
grk::RoiShiftHTFilter::RoiShiftHTFilter
RoiShiftHTFilter(DecompressBlockExec *block)
Definition: PostDecompressFilters.h:76
grk::ScaleHTFilter::copy
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:131
grk
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: BitIO.cpp:23
grk_includes.h
grk::ScaleFilter
Definition: PostDecompressFilters.h:60
grk::RoiShiftHTFilter
Definition: PostDecompressFilters.h:74
grk::RoiShiftFilter::copy
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:11
grk::ShiftFilter
Definition: PostDecompressFilters.h:26
grk::RoiScaleHTFilter::scale
float scale
Definition: PostDecompressFilters.h:124
grk::RoiScaleFilter::scale
float scale
Definition: PostDecompressFilters.h:57
grk::ShiftFilter::copy
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:31
grk::RoiShiftFilter::roiShift
uint32_t roiShift
Definition: PostDecompressFilters.h:24
grk::ShiftHTFilter
Definition: PostDecompressFilters.h:94
grk::ShiftHTFilter::copy
void copy(T *dest, T *src, uint32_t len)
Definition: PostDecompressFilters.h:97
grk::DecompressBlockExec
Definition: T1Structs.h:270
grk::ShiftHTFilter::shift
uint32_t shift
Definition: PostDecompressFilters.h:105
grk::RoiScaleFilter
Definition: PostDecompressFilters.h:38
grk::RoiScaleFilter::roiShift
uint32_t roiShift
Definition: PostDecompressFilters.h:56
grk::RoiShiftHTFilter::shift
uint32_t shift
Definition: PostDecompressFilters.h:92