Grok  9.5.0
PostT1DecompressFiltersOpenHTJ2K.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "grk_includes.h"
4 
5 namespace openhtj2k
6 {
7 template<typename T>
9 {
10  public:
12  : roiShift(block->roishift), shift(31U - (block->k_msbs + 1U))
13  {}
14  inline void copy(T* dest, T* src, uint32_t len)
15  {
16  T thresh = 1 << roiShift;
17  for(uint32_t i = 0; i < len; ++i)
18  {
19  T val = src[i];
20  T mag = (val & 0x7FFFFFFF);
21  if(mag >= thresh)
22  val = (T)(((uint32_t)mag >> roiShift) & ((uint32_t)val & 0x80000000));
23  int32_t val_shifted = (val & 0x7FFFFFFF) >> shift;
24  dest[i] = (int32_t)(((uint32_t)val & 0x80000000) ? -val_shifted : val_shifted);
25  }
26  }
27 
28  private:
29  uint32_t roiShift;
30  uint32_t shift;
31 };
32 template<typename T>
34 {
35  public:
37  {
38  GRK_UNUSED(block);
39  }
40  inline void copy(T* dest, T* src, uint32_t len)
41  {
42  for(uint32_t i = 0; i < len; ++i)
43  {
44  dest[i] = src[i];
45  }
46  }
47 };
48 
49 template<typename T>
51 {
52  public:
54  {
55  GRK_UNUSED(block);
56  }
57  inline void copy(T* dest, T* src, uint32_t len)
58  {
59  for(uint32_t i = 0; i < len; ++i)
60  {
61  ((float*)dest)[i] = src[i];
62  }
63  }
64 };
65 
66 
67 template<typename T>
69 {
70  public:
71  ScaleOpenHTJ2KFilter(grk::DecompressBlockExec* block) : scale(block->stepsize / (float)(1u << (31 - (block->k_msbs+1)))) {
72  assert(block->bandNumbps <= 31);
73  }
74  inline void copy(T* dest, T* src, uint32_t len)
75  {
76  for(uint32_t i = 0; i < len; ++i)
77  {
78  ((float*)dest)[i] = src[i] * scale;
79  }
80  }
81 
82  private:
83  float scale;
84 };
85 
86 
87 } // namespace openhtj2k
Definition: PostT1DecompressFiltersOpenHTJ2K.h:51
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:57
RoiScaleOpenHTJ2KFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:53
Definition: PostT1DecompressFiltersOpenHTJ2K.h:9
uint32_t shift
Definition: PostT1DecompressFiltersOpenHTJ2K.h:30
RoiShiftOpenHTJ2KFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:11
uint32_t roiShift
Definition: PostT1DecompressFiltersOpenHTJ2K.h:29
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:14
Definition: PostT1DecompressFiltersOpenHTJ2K.h:69
ScaleOpenHTJ2KFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:71
float scale
Definition: PostT1DecompressFiltersOpenHTJ2K.h:83
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:74
Definition: PostT1DecompressFiltersOpenHTJ2K.h:34
ShiftOpenHTJ2KFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:36
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:40
#define GRK_UNUSED(x)
Definition: grk_includes.h:87
Definition: PostT1DecompressFiltersOpenHTJ2K.h:6
uint8_t bandNumbps
Definition: BlockExec.h:32
Definition: BlockExec.h:45