Grok  9.7.5
PostT1DecompressFilters.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "grk_includes.h"
4 
5 namespace grk
6 {
7 template<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 };
31 template<typename T>
33 {
34  public:
36  {
37  GRK_UNUSED(block);
38  }
39  inline void copy(T* dest, T* src, uint32_t len)
40  {
41  for(uint32_t i = 0; i < len; ++i)
42  dest[i] = src[i] / 2;
43  }
44 };
45 
46 template<typename T>
48 {
49  public:
51  : roiShift(block->roishift), scale(block->stepsize / 2)
52  {}
53  inline void copy(T* dest, T* src, uint32_t len)
54  {
55  T thresh = 1 << roiShift;
56  for(uint32_t i = 0; i < len; ++i)
57  {
58  T val = src[i];
59  T mag = abs(val);
60  if(mag >= thresh)
61  {
62  mag >>= roiShift;
63  val = val < 0 ? -mag : mag;
64  }
65  ((float*)dest)[i] = (float)val * scale;
66  }
67  }
68 
69  private:
70  uint32_t roiShift;
71  float scale;
72 };
73 
74 template<typename T>
76 {
77  public:
78  ScaleFilter(DecompressBlockExec* block) : scale(block->stepsize / 2) {}
79  inline void copy(T* dest, T* src, uint32_t len)
80  {
81  for(uint32_t i = 0; i < len; ++i)
82  ((float*)dest)[i] = (float)src[i] * scale;
83  }
84 
85  private:
86  float scale;
87 };
88 
89 } // namespace grk
Definition: PostT1DecompressFilters.h:48
float scale
Definition: PostT1DecompressFilters.h:71
uint32_t roiShift
Definition: PostT1DecompressFilters.h:70
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFilters.h:53
RoiScaleFilter(DecompressBlockExec *block)
Definition: PostT1DecompressFilters.h:50
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:76
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFilters.h:79
float scale
Definition: PostT1DecompressFilters.h:86
ScaleFilter(DecompressBlockExec *block)
Definition: PostT1DecompressFilters.h:78
Definition: PostT1DecompressFilters.h:33
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFilters.h:39
ShiftFilter(DecompressBlockExec *block)
Definition: PostT1DecompressFilters.h:35
#define GRK_UNUSED(x)
Definition: grk_includes.h:87
Copyright (C) 2016-2022 Grok Image Compression Inc.
Definition: ICacheable.h:20
Definition: BlockExec.h:45