65 grkRectU32 tileCompUnreduced, uint32_t FILTER_WIDTH)
68 tileCompWindow.height())),
77 (resno == 0) ? (uint32_t)(numresolutions - 1U) : (uint32_t)(numresolutions - resno);
86 tileCompWindowUnreduced,
87 tileCompUnreduced, 2 * FILTER_WIDTH));
96 auto bandWindow =
getBandWindow(numDecomps, orient, tileCompWindowUnreduced,
97 tileCompUnreduced, 2 * FILTER_WIDTH);
101 bandWindow.
pan(-(int64_t)bandFull.x0, -(int64_t)bandFull.y0);
108 (std::min<uint32_t>)(2 * winLow->x0, 2 * winHigh->x0 + 1);
110 (std::max<uint32_t>)(2 * winLow->x1, 2 * winHigh->x1 + 1);
114 (std::min<uint32_t>)(2 * winLow->y0, 2 * winHigh->y0 + 1);
116 (std::max<uint32_t>)(2 * winLow->y1, 2 * winHigh->y1 + 1);
152 auto b = tileCompAtRes->
tileBand + i;
160 tileCompWindow.
width(), tileCompWindow.
height() / 2);
244 if(!b->alloc2d(clear))
277 return tileCompWindowUnreduced;
279 uint32_t tcx0 = tileCompWindowUnreduced.
x0;
280 uint32_t tcy0 = tileCompWindowUnreduced.
y0;
281 uint32_t tcx1 = tileCompWindowUnreduced.
x1;
282 uint32_t tcy1 = tileCompWindowUnreduced.
y1;
287 uint32_t bx0 = orientation & 1;
288 uint32_t by0 = (uint32_t)(orientation >> 1U);
290 uint32_t bx0Shift = (1U << (numDecomps - 1)) * bx0;
291 uint32_t by0Shift = (1U << (numDecomps - 1)) * by0;
294 (tcx0 <= bx0Shift) ? 0 : ceildivpow2<uint32_t>(tcx0 - bx0Shift, numDecomps),
295 (tcy0 <= by0Shift) ? 0 : ceildivpow2<uint32_t>(tcy0 - by0Shift, numDecomps),
296 (tcx1 <= bx0Shift) ? 0 : ceildivpow2<uint32_t>(tcx1 - bx0Shift, numDecomps),
297 (tcy1 <= by0Shift) ? 0 : ceildivpow2<uint32_t>(tcy1 - by0Shift, numDecomps));
308 grkRectU32 unreducedTileComp, uint32_t padding)
313 assert(orientation == 0);
314 return unreducedTileCompWindow.
grow(padding).
intersection(&unreducedTileComp);
316 auto oneLessDecompWindow = unreducedTileCompWindow;
317 auto oneLessDecompTile = unreducedTileComp;
320 oneLessDecompWindow =
getBandWindow(numDecomps - 1, 0, unreducedTileCompWindow);
321 oneLessDecompTile =
getBandWindow(numDecomps - 1, 0, unreducedTileComp);
325 1, orientation, oneLessDecompWindow.grow(2 * padding).intersection(&oneLessDecompTile));
348 grkRectU32 unreducedTileCompOrImageCompWindow,
349 Resolution* tileCompResolution, uint8_t numresolutions,
350 uint8_t reducedNumResolutions)
358 auto unreducedImageCompWindow = unreducedTileCompOrImageCompWindow;
367 assert(reducedNumResolutions > 0);
368 for(uint32_t resno = 0; resno < reducedNumResolutions; ++resno)
371 auto tileCompAtRes = tileCompResolution + reducedNumResolutions - 1;
372 auto tileCompAtLowerRes =
373 reducedNumResolutions > 1 ? tileCompResolution + reducedNumResolutions - 2 :
nullptr;
376 numresolutions, (uint8_t)(reducedNumResolutions - 1U),
nullptr, tileCompAtRes,
378 wholeTileDecompress ? 0 : getFilterPad<uint32_t>(lossless));
381 topLevel->m_resWindowBufferTopLevelREL = topLevel->m_resWindowBufferREL;
383 for(uint8_t resno = 0; resno < reducedNumResolutions - 1; ++resno)
389 numresolutions, resno,
useBandWindows() ?
nullptr : topLevel->m_resWindowBufferREL,
390 tileCompResolution + resno, resno > 0 ? tileCompResolution + resno - 1 :
nullptr,
392 wholeTileDecompress ? 0 : getFilterPad<uint32_t>(lossless)));
414 uint32_t& offsety)
const
419 auto band = res->tileBand +
getBandIndex(resno, orientation);
421 uint32_t x = offsetx;
422 uint32_t y = offsety;
433 x += resLower->width();
435 y += resLower->height();
572 index = (uint8_t)orientation;
Copyright (C) 2016-2021 Grok Image Compression Inc.
Definition: ICacheable.h:20
grkRect< uint32_t > grkRectU32
Definition: util.h:56
eSplitOrientation
Definition: TileComponentWindowBuffer.h:44
@ SPLIT_H
Definition: TileComponentWindowBuffer.h:46
@ SPLIT_L
Definition: TileComponentWindowBuffer.h:45
@ SPLIT_NUM_ORIENTATIONS
Definition: TileComponentWindowBuffer.h:47
eBandOrientation
Definition: Subband.h:25
@ BAND_ORIENT_HH
Definition: Subband.h:29
@ BAND_ORIENT_HL
Definition: Subband.h:27
@ BAND_NUM_ORIENTATIONS
Definition: Subband.h:30
@ BAND_ORIENT_LH
Definition: Subband.h:28
@ BAND_ORIENT_LL
Definition: Subband.h:26
Definition: MemManager.h:79
Class: ResWindowBuffer.
Definition: TileComponentWindowBuffer.h:60
grkBuffer2d< T, AllocatorAligned > * m_resWindowBufferREL
Definition: TileComponentWindowBuffer.h:337
bool m_allocated
Definition: TileComponentWindowBuffer.h:328
~ResWindowBuffer()
Definition: TileComponentWindowBuffer.h:164
Resolution * m_tileCompResLower
Definition: TileComponentWindowBuffer.h:331
ResWindowBuffer(uint8_t numresolutions, uint8_t resno, grkBuffer2d< T, AllocatorAligned > *resWindowTopLevelREL, Resolution *tileCompAtRes, Resolution *tileCompAtLowerRes, grkRectU32 tileCompWindow, grkRectU32 tileCompWindowUnreduced, grkRectU32 tileCompUnreduced, uint32_t FILTER_WIDTH)
Definition: TileComponentWindowBuffer.h:61
static grkRectU32 getBandWindow(uint32_t numDecomps, uint8_t orientation, grkRectU32 tileCompWindowUnreduced)
Get band window (in tile component coordinates) for specified number of decompositions.
Definition: TileComponentWindowBuffer.h:272
static grkRectU32 getBandWindow(uint32_t numDecomps, uint8_t orientation, grkRectU32 unreducedTileCompWindow, grkRectU32 unreducedTileComp, uint32_t padding)
Get band window (in tile component coordinates) for specified number of decompositions (with padding)
Definition: TileComponentWindowBuffer.h:306
grkBuffer2d< T, AllocatorAligned > * m_resWindowBufferSplitREL[SPLIT_NUM_ORIENTATIONS]
Definition: TileComponentWindowBuffer.h:336
std::vector< grkRectU32 > m_bandWindowPadded
Definition: TileComponentWindowBuffer.h:334
bool alloc(bool clear)
Definition: TileComponentWindowBuffer.h:172
grkBuffer2d< T, AllocatorAligned > * m_resWindowBufferTopLevelREL
Definition: TileComponentWindowBuffer.h:338
Resolution * m_tileCompRes
Definition: TileComponentWindowBuffer.h:330
uint32_t m_filterWidth
Definition: TileComponentWindowBuffer.h:340
std::vector< grkBuffer2d< T, AllocatorAligned > * > m_bandWindowBufferPaddedREL
Definition: TileComponentWindowBuffer.h:333
Definition: Resolution.h:24
uint32_t numTileBandWindows
Definition: Resolution.h:84
Subband tileBand[BAND_NUM_INDICES]
Definition: Resolution.h:83
Definition: TileComponentWindowBuffer.h:345
bool useBandWindows() const
Definition: TileComponentWindowBuffer.h:559
grkRectU32 m_unreducedBounds
Definition: TileComponentWindowBuffer.h:580
grkRectU32 bounds() const
Get bounds of tile component (canvas coordinates) decompress: reduced canvas coordinates of window co...
Definition: TileComponentWindowBuffer.h:534
grkRectU32 unreducedBounds() const
Definition: TileComponentWindowBuffer.h:538
const grkBuffer2d< T, AllocatorAligned > * getResWindowBufferREL(uint32_t resno) const
Get resolution window.
Definition: TileComponentWindowBuffer.h:506
uint8_t m_numResolutions
Definition: TileComponentWindowBuffer.h:589
~TileComponentWindowBuffer()
Definition: TileComponentWindowBuffer.h:396
std::vector< ResWindowBuffer< T > * > m_resWindowBufferREL
Definition: TileComponentWindowBuffer.h:586
bool useBufferCoordinatesForCodeblock() const
Definition: TileComponentWindowBuffer.h:563
void toRelativeCoordinates(uint8_t resno, eBandOrientation orientation, uint32_t &offsetx, uint32_t &offsety) const
Transform code block offsets from canvas coordinates to either band coordinates (relative to sub band...
Definition: TileComponentWindowBuffer.h:413
bool m_wholeTileDecompress
Definition: TileComponentWindowBuffer.h:592
uint8_t getBandIndex(uint8_t resno, eBandOrientation orientation) const
Definition: TileComponentWindowBuffer.h:567
const grkBuffer2d< T, AllocatorAligned > * getResWindowBufferSplitREL(uint8_t resno, eSplitOrientation orientation) const
Definition: TileComponentWindowBuffer.h:494
const grkRectU32 * getBandWindowPadded(uint8_t resno, eBandOrientation orientation) const
Get padded band window.
Definition: TileComponentWindowBuffer.h:482
bool m_compress
Definition: TileComponentWindowBuffer.h:591
grkRectU32 m_bounds
Definition: TileComponentWindowBuffer.h:581
std::vector< Resolution * > m_resolution
Definition: TileComponentWindowBuffer.h:584
const grkBuffer2d< T, AllocatorAligned > * getBandWindowBufferPaddedREL(uint8_t resno, eBandOrientation orientation) const
Get padded band window buffer.
Definition: TileComponentWindowBuffer.h:464
TileComponentWindowBuffer(bool isCompressor, bool lossless, bool wholeTileDecompress, grkRectU32 tileCompUnreduced, grkRectU32 tileCompReduced, grkRectU32 unreducedTileCompOrImageCompWindow, Resolution *tileCompResolution, uint8_t numresolutions, uint8_t reducedNumResolutions)
Definition: TileComponentWindowBuffer.h:346
void transfer(T **buffer, uint32_t *stride)
Definition: TileComponentWindowBuffer.h:553
grkBuffer2d< T, AllocatorAligned > * getResWindowBufferHighestREL(void) const
Get highest resolution window.
Definition: TileComponentWindowBuffer.h:515
bool alloc()
Definition: TileComponentWindowBuffer.h:519
void attach(T *buffer, uint32_t stride)
Definition: TileComponentWindowBuffer.h:548
uint64_t stridedArea(void) const
Definition: TileComponentWindowBuffer.h:542
const grkBuffer2d< T, AllocatorAligned > * getCodeBlockDestWindowREL(uint8_t resno, eBandOrientation orientation) const
Get code block destination window.
Definition: TileComponentWindowBuffer.h:448
Definition: MemManager.h:223
T x1
Definition: util.h:96
T y0
Definition: util.h:96
grkRect< T > pan(int64_t x, int64_t y) const
Definition: util.h:225
bool is_valid(void) const
Definition: util.h:117
T width() const
Definition: util.h:209
grkRect< T > & grow(T boundary)
Definition: util.h:238
grkRect< T > intersection(const grkRect< T > rhs) const
Definition: util.h:173
grkRect< T > rectceildivpow2(uint32_t power) const
Definition: util.h:159
T height() const
Definition: util.h:213
T y1
Definition: util.h:96
T x0
Definition: util.h:96