Grok  9.7.5
PostT1DecompressFiltersOJPH.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "grk_includes.h"
4 
5 namespace ojph
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  ShiftOJPHFilter(grk::DecompressBlockExec* block) : shift(31U - (block->k_msbs + 1U)) {}
37  inline void copy(T* dest, T* src, uint32_t len)
38  {
39  for(uint32_t i = 0; i < len; ++i)
40  {
41  T val = src[i];
42  T val_shifted = (val & 0x7FFFFFFF) >> shift;
43  dest[i] = (T)(((uint32_t)val & 0x80000000) ? -val_shifted : val_shifted);
44  }
45  }
46 
47  private:
48  uint32_t shift;
49 };
50 
51 template<typename T>
53 {
54  public:
56  : roiShift(block->roishift),
57  scale(block->stepsize / (float)(1u << (31 - block->bandNumbps)))
58  {
59  assert(block->bandNumbps <= 31);
60  }
61  inline void copy(T* dest, T* src, uint32_t len)
62  {
63  T thresh = 1 << roiShift;
64  for(uint32_t i = 0; i < len; ++i)
65  {
66  T val = src[i];
67  T mag = (T)(val & 0x7FFFFFFF);
68  if(mag >= thresh)
69  val = (T)(((uint32_t)mag >> roiShift) & ((uint32_t)val & 0x80000000));
70  float val_scaled = (float)(val & 0x7FFFFFFF) * scale;
71  ((float*)dest)[i] = ((uint32_t)val & 0x80000000) ? -val_scaled : val_scaled;
72  }
73  }
74 
75  private:
76  uint32_t roiShift;
77  float scale;
78 };
79 
80 template<typename T>
82 {
83  public:
85  : scale(block->stepsize / (float)(1u << (31 - block->bandNumbps)))
86  {
87  assert(block->bandNumbps <= 31);
88  }
89  inline void copy(T* dest, T* src, uint32_t len)
90  {
91  for(uint32_t i = 0; i < len; ++i)
92  {
93  int32_t val = src[i];
94  float val_scaled = (float)(val & 0x7FFFFFFF) * scale;
95  ((float*)dest)[i] = ((uint32_t)val & 0x80000000) ? -val_scaled : val_scaled;
96  }
97  }
98 
99  private:
100  float scale;
101 };
102 
103 } // namespace ojph
Definition: PostT1DecompressFiltersOJPH.h:53
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOJPH.h:61
uint32_t roiShift
Definition: PostT1DecompressFiltersOJPH.h:76
float scale
Definition: PostT1DecompressFiltersOJPH.h:77
RoiScaleOJPHFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOJPH.h:55
Definition: PostT1DecompressFiltersOJPH.h:9
uint32_t roiShift
Definition: PostT1DecompressFiltersOJPH.h:29
uint32_t shift
Definition: PostT1DecompressFiltersOJPH.h:30
RoiShiftOJPHFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOJPH.h:11
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOJPH.h:14
Definition: PostT1DecompressFiltersOJPH.h:82
float scale
Definition: PostT1DecompressFiltersOJPH.h:100
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOJPH.h:89
ScaleOJPHFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOJPH.h:84
Definition: PostT1DecompressFiltersOJPH.h:34
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOJPH.h:37
ShiftOJPHFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOJPH.h:36
uint32_t shift
Definition: PostT1DecompressFiltersOJPH.h:48
Definition: ojph_block_decoder.cpp:50
uint8_t bandNumbps
Definition: BlockExec.h:32
Definition: BlockExec.h:45