Grok 10.0.0
PostT1DecompressFiltersOJPH.h
Go to the documentation of this file.
1#pragma once
2
3#include "grk_includes.h"
4
5namespace ojph
6{
7template<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};
32template<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
51template<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
80template<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_common.cpp:48
uint8_t bandNumbps
Definition: BlockExec.h:32
Definition: BlockExec.h:45