Grok  10.0.3
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:
36  ShiftOpenHTJ2KFilter([[maybe_unused]] grk::DecompressBlockExec* block) {}
37  inline void copy(T* dest, T* src, uint32_t len)
38  {
39  for(uint32_t i = 0; i < len; ++i)
40  {
41  dest[i] = src[i];
42  }
43  }
44 };
45 
46 template<typename T>
48 {
49  public:
51  inline void copy(T* dest, T* src, uint32_t len)
52  {
53  for(uint32_t i = 0; i < len; ++i)
54  {
55  ((float*)dest)[i] = src[i];
56  }
57  }
58 };
59 
60 template<typename T>
62 {
63  public:
65  : scale(block->stepsize / (float)(1u << (31 - (block->k_msbs + 1))))
66  {
67  assert(block->bandNumbps <= 31);
68  }
69  inline void copy(T* dest, T* src, uint32_t len)
70  {
71  for(uint32_t i = 0; i < len; ++i)
72  {
73  ((float*)dest)[i] = src[i] * scale;
74  }
75  }
76 
77  private:
78  float scale;
79 };
80 
81 } // namespace openhtj2k
Definition: PostT1DecompressFiltersOpenHTJ2K.h:48
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:51
RoiScaleOpenHTJ2KFilter([[maybe_unused]] grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:50
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:62
ScaleOpenHTJ2KFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:64
float scale
Definition: PostT1DecompressFiltersOpenHTJ2K.h:78
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:69
Definition: PostT1DecompressFiltersOpenHTJ2K.h:34
ShiftOpenHTJ2KFilter([[maybe_unused]] grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:36
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOpenHTJ2K.h:37
Definition: PostT1DecompressFiltersOpenHTJ2K.h:6
uint8_t bandNumbps
Definition: BlockExec.h:32
Definition: BlockExec.h:45