Grok  9.5.0
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  scale(block->stepsize / (float)(1u << (31 - block->bandNumbps)))
57  {
58  assert(block->bandNumbps <= 31);
59  }
60  inline void copy(T* dest, T* src, uint32_t len)
61  {
62  T thresh = 1 << roiShift;
63  for(uint32_t i = 0; i < len; ++i)
64  {
65  T val = src[i];
66  T mag = (T)(val & 0x7FFFFFFF);
67  if(mag >= thresh)
68  val = (T)(((uint32_t)mag >> roiShift) & ((uint32_t)val & 0x80000000));
69  float val_scaled = (float)(val & 0x7FFFFFFF) * scale;
70  ((float*)dest)[i] = ((uint32_t)val & 0x80000000) ? -val_scaled : val_scaled;
71  }
72  }
73 
74  private:
75  uint32_t roiShift;
76  float scale;
77 };
78 
79 template<typename T>
81 {
82  public:
83  ScaleOJPHFilter(grk::DecompressBlockExec* block) : scale(block->stepsize / (float)(1u << (31 - block->bandNumbps))) {
84  assert(block->bandNumbps <= 31);
85  }
86  inline void copy(T* dest, T* src, uint32_t len)
87  {
88  for(uint32_t i = 0; i < len; ++i)
89  {
90  int32_t val = src[i];
91  float val_scaled = (float)(val & 0x7FFFFFFF) * scale;
92  ((float*)dest)[i] = ((uint32_t)val & 0x80000000) ? -val_scaled : val_scaled;
93  }
94  }
95 
96  private:
97  float scale;
98 };
99 
100 } // namespace ojph
Definition: PostT1DecompressFiltersOJPH.h:53
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOJPH.h:60
uint32_t roiShift
Definition: PostT1DecompressFiltersOJPH.h:75
float scale
Definition: PostT1DecompressFiltersOJPH.h:76
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:81
float scale
Definition: PostT1DecompressFiltersOJPH.h:97
void copy(T *dest, T *src, uint32_t len)
Definition: PostT1DecompressFiltersOJPH.h:86
ScaleOJPHFilter(grk::DecompressBlockExec *block)
Definition: PostT1DecompressFiltersOJPH.h:83
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:49
uint8_t bandNumbps
Definition: BlockExec.h:32
Definition: BlockExec.h:45