Grok  10.0.3
ResSimple.h
Go to the documentation of this file.
1 
17 #pragma once
18 
19 namespace grk
20 {
21 
23 {
29 };
30 // LL band index when resolution == 0
31 const uint32_t BAND_RES_ZERO_INDEX_LL = 0;
32 
33 // band indices when resolution > 0
35 {
40 };
41 
42 struct 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