Grok 12.0.1
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, const 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 explicit ShiftOJPHFilter(grk::DecompressBlockExec* block) : shift(31U - (block->k_msbs + 1U)) {}
37 inline void copy(T* dest, const 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), scale(block->stepsize / (float)(1u << (31 - block->bandNumbps)))
57 {
58 assert(block->bandNumbps <= 31);
59 }
60 inline void copy(T* dest, const 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
79template<typename T>
81{
82 public:
84 : scale(block->stepsize / (float)(1u << (31 - block->bandNumbps)))
85 {
86 assert(block->bandNumbps <= 31);
87 }
88 inline void copy(T* dest, const T* src, uint32_t len)
89 {
90 for(uint32_t i = 0; i < len; ++i)
91 {
92 int32_t val = src[i];
93 float val_scaled = (float)(val & 0x7FFFFFFF) * scale;
94 ((float*)dest)[i] = ((uint32_t)val & 0x80000000) ? -val_scaled : val_scaled;
95 }
96 }
97
98 private:
99 float scale;
100};
101
102} // namespace ojph
Definition PostT1DecompressFiltersOJPH.h:53
void copy(T *dest, const 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
void copy(T *dest, const T *src, uint32_t len)
Definition PostT1DecompressFiltersOJPH.h:14
uint32_t shift
Definition PostT1DecompressFiltersOJPH.h:30
RoiShiftOJPHFilter(grk::DecompressBlockExec *block)
Definition PostT1DecompressFiltersOJPH.h:11
Definition PostT1DecompressFiltersOJPH.h:81
float scale
Definition PostT1DecompressFiltersOJPH.h:99
void copy(T *dest, const T *src, uint32_t len)
Definition PostT1DecompressFiltersOJPH.h:88
ScaleOJPHFilter(grk::DecompressBlockExec *block)
Definition PostT1DecompressFiltersOJPH.h:83
Definition PostT1DecompressFiltersOJPH.h:34
void copy(T *dest, const 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