Grok 10.0.1
ResSimple.h
Go to the documentation of this file.
1
17#pragma once
18
19namespace grk
20{
21
23{
29};
30// LL band index when resolution == 0
31const uint32_t BAND_RES_ZERO_INDEX_LL = 0;
32
33// band indices when resolution > 0
35{
40};
41
42struct ResSimple : public grk_rect32
43{
46 {
47 setRect(res);
48 this->numTileBandWindows = numTileBandWindows;
49 for(uint8_t i = 0; i < numTileBandWindows; i++)
50 this->tileBand[i] = tileBand[i];
51 }
52 ResSimple(grk_rect32 currentRes, bool finalResolution)
53 {
54 setRect(currentRes);
55 if(finalResolution)
56 {
58 tileBand[0] = currentRes;
59 }
60 else
61 {
63 for(uint8_t j = 0; j < numTileBandWindows; ++j)
64 tileBand[j] = getBandWindow(1, j + 1, currentRes);
65 }
66 }
77 static grk_rect32 getBandWindow(uint8_t numDecomps, uint8_t orientation,
78 grk_rect32 tileCompWindowUnreduced)
79 {
80 assert(orientation < BAND_NUM_ORIENTATIONS);
81 if(numDecomps == 0)
82 return tileCompWindowUnreduced;
83
84 /* project window onto sub-band generated by `numDecomps` decompositions */
85 /* See equation B-15 of the standard. */
86 uint32_t bx0 = orientation & 1;
87 uint32_t by0 = (uint32_t)(orientation >> 1U);
88
89 uint32_t bx0Offset = (1U << (numDecomps - 1)) * bx0;
90 uint32_t by0Offset = (1U << (numDecomps - 1)) * by0;
91
92 uint32_t tc_originx0 = tileCompWindowUnreduced.origin_x0;
93 uint32_t tc_originy0 = tileCompWindowUnreduced.origin_y0;
94 uint32_t tcx0 = tileCompWindowUnreduced.x0;
95 uint32_t tcy0 = tileCompWindowUnreduced.y0;
96 uint32_t tcx1 = tileCompWindowUnreduced.x1;
97 uint32_t tcy1 = tileCompWindowUnreduced.y1;
98
99 return grk_rect32(
100 (tc_originx0 <= bx0Offset) ? 0
101 : ceildivpow2<uint32_t>(tc_originx0 - bx0Offset, numDecomps),
102 (tc_originy0 <= by0Offset) ? 0
103 : ceildivpow2<uint32_t>(tc_originy0 - by0Offset, numDecomps),
104 (tcx0 <= bx0Offset) ? 0 : ceildivpow2<uint32_t>(tcx0 - bx0Offset, numDecomps),
105 (tcy0 <= by0Offset) ? 0 : ceildivpow2<uint32_t>(tcy0 - by0Offset, numDecomps),
106 (tcx1 <= bx0Offset) ? 0 : ceildivpow2<uint32_t>(tcx1 - bx0Offset, numDecomps),
107 (tcy1 <= by0Offset) ? 0 : ceildivpow2<uint32_t>(tcy1 - by0Offset, numDecomps));
108 }
109
110 grk_rect32 tileBand[BAND_NUM_INDICES]; // unreduced tile component bands in canvas coordinates
111 uint8_t numTileBandWindows; // 1 or 3
112};
113
114} // namespace grk
Copyright (C) 2016-2022 Grok Image Compression Inc.
Definition: ICacheable.h:20
grk_rect< uint32_t > grk_rect32
Definition: geometry.h:61
eBandOrientation
Definition: ResSimple.h:23
@ BAND_ORIENT_HH
Definition: ResSimple.h:27
@ BAND_ORIENT_HL
Definition: ResSimple.h:25
@ BAND_NUM_ORIENTATIONS
Definition: ResSimple.h:28
@ BAND_ORIENT_LH
Definition: ResSimple.h:26
@ BAND_ORIENT_LL
Definition: ResSimple.h:24
eBandIndex
Definition: ResSimple.h:35
@ BAND_INDEX_HL
Definition: ResSimple.h:36
@ BAND_INDEX_LH
Definition: ResSimple.h:37
@ BAND_NUM_INDICES
Definition: ResSimple.h:39
@ BAND_INDEX_HH
Definition: ResSimple.h:38
const uint32_t BAND_RES_ZERO_INDEX_LL
Definition: ResSimple.h:31
Definition: ResSimple.h:43
ResSimple(grk_rect32 currentRes, bool finalResolution)
Definition: ResSimple.h:52
grk_rect32 tileBand[BAND_NUM_INDICES]
Definition: ResSimple.h:110
ResSimple(void)
Definition: ResSimple.h:44
ResSimple(grk_rect32 *res, uint8_t numTileBandWindows, grk_rect32(&tileBand)[BAND_NUM_INDICES])
Definition: ResSimple.h:45
uint8_t numTileBandWindows
Definition: ResSimple.h:111
static grk_rect32 getBandWindow(uint8_t numDecomps, uint8_t orientation, grk_rect32 tileCompWindowUnreduced)
Get band window (in tile component coordinates) for specified number of decompositions.
Definition: ResSimple.h:77
T y1
Definition: geometry.h:124
T x0
Definition: geometry.h:124
T x1
Definition: geometry.h:124
T origin_y0
Definition: geometry.h:123
T origin_x0
Definition: geometry.h:123
void setRect(grk_rect< uint32_t > *rhs)
Definition: geometry.h:228
T y0
Definition: geometry.h:124