Go to the documentation of this file.
38 uint32_t HORIZ_PASS_HEIGHT,
86 m_resWindow->y0 = min<uint32_t>(2 * win_low.y0, 2 * win_high.y0);
109 assert(tileCompFullRes->
numBandWindows == 3 || !tileCompFullResLower);
110 if (tileCompFullResLower) {
149 for (uint8_t orientation = 0; orientation <
m_bandWindows.size(); ++orientation){
182 if (!b->alloc(clear))
209 assert(resno > 0 || orientation == 0);
211 uint32_t nb = (resno == 0) ? num_res - 1 :num_res - resno;
213 uint32_t tcx0 = unreducedTileCompBandWindow.
x0;
214 uint32_t tcy0 = unreducedTileCompBandWindow.
y0;
215 uint32_t tcx1 = unreducedTileCompBandWindow.
x1;
216 uint32_t tcy1 = unreducedTileCompBandWindow.
y1;
219 uint32_t x0b = orientation & 1;
220 uint32_t y0b = orientation >> 1;
221 uint32_t tbx0 = (nb == 0) ? tcx0 :
222 (tcx0 <= (1U << (nb - 1)) * x0b) ? 0 :
223 ceildivpow2<uint32_t>(tcx0 - (1U << (nb - 1)) * x0b, nb);
225 uint32_t tby0 = (nb == 0) ? tcy0 :
226 (tcy0 <= (1U << (nb - 1)) * y0b) ? 0 :
227 ceildivpow2<uint32_t>(tcy0 - (1U << (nb - 1)) * y0b, nb);
229 uint32_t tbx1 = (nb == 0) ? tcx1 :
230 (tcx1 <= (1U << (nb - 1)) * x0b) ? 0 :
231 ceildivpow2<uint32_t>(tcx1 - (1U << (nb - 1)) * x0b, nb);
233 uint32_t tby1 = (nb == 0) ? tcy1 :
234 (tcy1 <= (1U << (nb - 1)) * y0b) ? 0 :
235 ceildivpow2<uint32_t>(tcy1 - (1U << (nb - 1)) * y0b, nb);
270 bool wholeTileDecompress,
275 uint8_t numresolutions,
287 unreducedTileCompDim);
291 assert(reducedNumResolutions > 0);
292 for (uint32_t resno = 0; resno < reducedNumResolutions; ++resno)
294 auto canvasFullRes = tileCompResolutions + reducedNumResolutions - 1;
295 auto canvasFullResLower =
296 reducedNumResolutions > 1 ?
297 tileCompResolutions + reducedNumResolutions - 2 :
nullptr;
299 auto topLevel =
new ResWindow<T>(numresolutions, reducedNumResolutions - 1,
300 nullptr, canvasFullRes, canvasFullResLower,
m_bounds,
302 wholeTileDecompress ?
303 0 : getHorizontalPassHeight<uint32_t>(lossless),
304 wholeTileDecompress ? 0 : getFilterWidth<uint32_t>(lossless));
307 topLevel->m_resWindowTopLevel = topLevel->m_resWindow;
309 for (uint8_t resno = 0; resno < reducedNumResolutions - 1; ++resno) {
313 unreducedTileWindowDim);
317 tileCompResolutions + resno,
318 resno > 0 ? tileCompResolutions + resno - 1 :
nullptr,
320 wholeTileDecompress ?
321 0 : getHorizontalPassHeight<uint32_t>(lossless),
322 wholeTileDecompress ?
323 0 : getFilterWidth<uint32_t>(lossless)));
346 auto band = res->band +
getBandIndex(resno,orientation);
348 uint32_t x = offsetx;
349 uint32_t y = offsety;
359 x += resLower->width();
361 y += resLower->height();
392 return m_resWindows[resno]->m_paddedBandWindows[orientation];
456 void transfer(T** buffer,
bool* owns, uint32_t *stride){
475 index = (uint8_t)orientation;
@ BAND_INDEX_LH
Definition: T1Structs.h:53
bool useBandWindows() const
Definition: TileComponentWindowBuffer.h:463
@ SPLIT_NUM_ORIENTATIONS
Definition: T1Structs.h:32
T height() const
Definition: util.h:172
grk_rect_u32 m_bounds
Definition: TileComponentWindowBuffer.h:499
@ BAND_NUM_ORIENTATIONS
Definition: T1Structs.h:41
bool m_allocated
Definition: TileComponentWindowBuffer.h:241
~ResWindow()
Definition: TileComponentWindowBuffer.h:121
grk_rectangle< T > pan(int64_t x, int64_t y) const
Definition: util.h:176
std::vector< grk_rect_u32 > m_paddedBandWindows
Definition: TileComponentWindowBuffer.h:247
bool m_wholeTileDecompress
Definition: TileComponentWindowBuffer.h:511
T x1
Definition: util.h:77
bool is_valid(void) const
Definition: util.h:92
uint8_t getBandIndex(uint8_t resno, eBandOrientation orientation) const
Definition: TileComponentWindowBuffer.h:472
bool useResCoordsForCodeBlock() const
Definition: TileComponentWindowBuffer.h:468
uint64_t strided_area(void) const
Definition: TileComponentWindowBuffer.h:447
const grk_rect_u32 getPaddedTileBandWindow(uint8_t resno, eBandOrientation orientation) const
Definition: TileComponentWindowBuffer.h:389
grk_rect_u32 unreduced_bounds() const
Definition: TileComponentWindowBuffer.h:443
Definition: TileComponentWindowBuffer.h:267
@ BAND_ORIENT_HL
Definition: T1Structs.h:38
grk_buffer_2d< T > * getTileBuf() const
Definition: TileComponentWindowBuffer.h:491
grk_buffer_2d< T > * m_resWindowTopLevel
Definition: TileComponentWindowBuffer.h:250
grk_rectangle< T > & grow(T boundary)
Definition: util.h:182
const grk_buffer_2d< T > * getWindow(uint32_t resno) const
Get resolution window.
Definition: TileComponentWindowBuffer.h:412
@ BAND_ORIENT_LH
Definition: T1Structs.h:39
uint32_t m_filterWidth
Definition: TileComponentWindowBuffer.h:251
Resolution * m_tileCompFullResLower
Definition: TileComponentWindowBuffer.h:245
grk_rect_u32 m_unreducedBounds
Definition: TileComponentWindowBuffer.h:495
T width() const
Definition: util.h:169
const grk_buffer_2d< T > * getWindow(void) const
Get tile window.
Definition: TileComponentWindowBuffer.h:421
const grk_buffer_2d< T > * getWindow(uint8_t resno, eBandOrientation orientation) const
Get non-LL band window.
Definition: TileComponentWindowBuffer.h:385
Class to manage multiple buffers needed to perform DWT transform.
Definition: TileComponentWindowBuffer.h:29
Subband band[BAND_NUM_INDICES]
Definition: T1Structs.h:240
@ SPLIT_L
Definition: T1Structs.h:30
~TileComponentWindowBuffer()
Definition: TileComponentWindowBuffer.h:328
grk_buffer_2d< T > * getBandWindow(uint8_t resno, eBandOrientation orientation) const
If resno is > 0, return HL,LH or HH band window, otherwise return LL resolution window.
Definition: TileComponentWindowBuffer.h:484
void transfer(T **buffer, bool *owns, uint32_t *stride)
Definition: TileComponentWindowBuffer.h:456
void transform(uint8_t resno, eBandOrientation orientation, uint32_t &offsetx, uint32_t &offsety) const
Tranform code block offsets to either band coordinates or resolution coordinates.
Definition: TileComponentWindowBuffer.h:342
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: BitIO.cpp:23
uint32_t numBandWindows
Definition: T1Structs.h:241
@ BAND_ORIENT_HH
Definition: T1Structs.h:40
grk_rectangle< uint32_t > grk_rect_u32
Definition: util.h:48
std::vector< Resolution * > m_tileCompResolutions
Definition: TileComponentWindowBuffer.h:502
Resolution * m_tileCompFullRes
Definition: TileComponentWindowBuffer.h:243
grk_rectangle< T > intersection(const grk_rectangle< T > rhs) const
Definition: util.h:144
grk_buffer_2d< T > * m_resWindow
Definition: TileComponentWindowBuffer.h:249
bool alloc()
Definition: TileComponentWindowBuffer.h:425
const grk_buffer_2d< T > * getCodeBlockDestWindow(uint8_t resno, eBandOrientation orientation) const
Get code block destination window.
Definition: TileComponentWindowBuffer.h:374
std::vector< ResWindow< T > * > m_resWindows
Definition: TileComponentWindowBuffer.h:505
Definition: T1Structs.h:231
grk_rectangle< T > rectceildivpow2(uint32_t power) const
Definition: util.h:126
grk_buffer_2d< T > * m_splitWindow[SPLIT_NUM_ORIENTATIONS]
Definition: TileComponentWindowBuffer.h:248
TileComponentWindowBuffer(bool isCompressor, bool lossless, bool wholeTileDecompress, grk_rect_u32 unreducedTileCompDim, grk_rect_u32 reducedTileCompDim, grk_rect_u32 unreducedTileWindowDim, Resolution *tileCompResolutions, uint8_t numresolutions, uint8_t reducedNumResolutions)
Definition: TileComponentWindowBuffer.h:268
eBandOrientation
Definition: T1Structs.h:36
@ BAND_INDEX_HL
Definition: T1Structs.h:54
bool alloc(bool clear)
Definition: TileComponentWindowBuffer.h:129
T x0
Definition: util.h:77
std::vector< grk_buffer_2d< T > * > m_bandWindows
Definition: TileComponentWindowBuffer.h:246
eSplitOrientation
Definition: T1Structs.h:29
T y1
Definition: util.h:77
@ BAND_INDEX_HH
Definition: T1Structs.h:55
grk_rect_u32 bounds() const
Get bounds of tile component decompress: reduced tile component coordinates of window compress: unred...
Definition: TileComponentWindowBuffer.h:439
ResWindow(uint8_t numresolutions, uint8_t resno, grk_buffer_2d< T > *top, Resolution *tileCompFullRes, Resolution *tileCompFullResLower, grk_rect_u32 tileCompWindowBounds, grk_rect_u32 tileCompWindowUnreducedBounds, uint32_t HORIZ_PASS_HEIGHT, uint32_t FILTER_WIDTH)
Definition: TileComponentWindowBuffer.h:31
bool m_compress
Definition: TileComponentWindowBuffer.h:510
const grk_buffer_2d< T > * getSplitWindow(uint8_t resno, eSplitOrientation orientation) const
Definition: TileComponentWindowBuffer.h:400
uint8_t m_numResolutions
Definition: TileComponentWindowBuffer.h:508
@ SPLIT_H
Definition: T1Structs.h:31
T y0
Definition: util.h:77
static grk_rect_u32 getTileCompBandWindow(uint8_t num_res, uint8_t resno, uint8_t orientation, grk_rect_u32 unreducedTileCompBandWindow)
Get band window in tile component coordinates for specified resolution and band orientation.
Definition: TileComponentWindowBuffer.h:203
@ BAND_ORIENT_LL
Definition: T1Structs.h:37
void attach(T *buffer, uint32_t stride)
Definition: TileComponentWindowBuffer.h:452