Grok  10.0.3
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:
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 
43 template<typename T>
45 {
46  public:
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 
71 template<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
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
ShiftFilter([[maybe_unused]] DecompressBlockExec *block)
Definition: PostT1DecompressFilters.h:35
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFilters.h:36
Copyright (C) 2016-2022 Grok Image Compression Inc.
Definition: ICacheable.h:20
Definition: BlockExec.h:45