Go to the documentation of this file.
38 uint32_t HORIZ_PASS_HEIGHT,
39 uint32_t FILTER_WIDTH) :
allocated(false),
86 resWindow->y0 = min<uint32_t>(2 * win_low.y0, 2 * win_high.y0);
110 if (lower_full_res) {
149 for (uint8_t orientation = 0; orientation <
bandWindow.size(); ++orientation){
182 if (!b->alloc(clear))
206 assert(resno > 0 || orientation == 0);
208 uint32_t nb = (resno == 0) ? num_res - 1 :num_res - resno;
210 uint32_t tcx0 = unreduced_window.
x0;
211 uint32_t tcy0 = unreduced_window.
y0;
212 uint32_t tcx1 = unreduced_window.
x1;
213 uint32_t tcy1 = unreduced_window.
y1;
216 uint32_t x0b = orientation & 1;
217 uint32_t y0b = orientation >> 1;
218 uint32_t tbx0 = (nb == 0) ? tcx0 :
219 (tcx0 <= (1U << (nb - 1)) * x0b) ? 0 :
220 ceildivpow2<uint32_t>(tcx0 - (1U << (nb - 1)) * x0b, nb);
222 uint32_t tby0 = (nb == 0) ? tcy0 :
223 (tcy0 <= (1U << (nb - 1)) * y0b) ? 0 :
224 ceildivpow2<uint32_t>(tcy0 - (1U << (nb - 1)) * y0b, nb);
226 uint32_t tbx1 = (nb == 0) ? tcx1 :
227 (tcx1 <= (1U << (nb - 1)) * x0b) ? 0 :
228 ceildivpow2<uint32_t>(tcx1 - (1U << (nb - 1)) * x0b, nb);
230 uint32_t tby1 = (nb == 0) ? tcy1 :
231 (tcy1 <= (1U << (nb - 1)) * y0b) ? 0 :
232 ceildivpow2<uint32_t>(tcy1 - (1U << (nb - 1)) * y0b, nb);
274 uint8_t numresolutions,
275 uint8_t reduced_num_resolutions) :
292 assert(reduced_num_resolutions>0);
293 for (uint32_t resno = 0; resno < reduced_num_resolutions; ++resno)
294 resolutions.push_back(tile_comp_resolutions+resno);
296 auto fullRes = tile_comp_resolutions+reduced_num_resolutions-1;
297 auto fullResLower = reduced_num_resolutions > 1 ?
298 tile_comp_resolutions+reduced_num_resolutions-2 :
nullptr;
302 reduced_num_resolutions-1,
312 topLevel->resWindowTopLevel = topLevel->resWindow;
313 for (uint8_t resno = 0; resno < reduced_num_resolutions-1; ++resno){
318 unreduced_window_dim);
322 tile_comp_resolutions+resno,
323 resno > 0 ? tile_comp_resolutions+resno-1 :
nullptr,
349 auto band = res->band +
getBandIndex(resno,orientation);
351 uint32_t x = offsetx;
352 uint32_t y = offsety;
362 x += resLower->width();
364 y += resLower->height();
393 if (
res_windows[resno]->paddedTileBandWindow.empty())
395 return res_windows[resno]->paddedTileBandWindow[orientation];
406 return res_windows[resno]->splitWindow[orientation];
459 void transfer(T** buffer,
bool* owns, uint32_t *stride){
460 tile_buf()->transfer(buffer,owns,stride);
478 index = (uint8_t)orientation;
std::vector< grk_buffer_2d< T > * > bandWindow
Definition: TileComponentWindowBuffer.h:243
@ BAND_INDEX_LH
Definition: T1Structs.h:53
bool global_code_block_offset() const
Definition: TileComponentWindowBuffer.h:471
grk_rect_u32 m_unreduced_bounds
Definition: TileComponentWindowBuffer.h:498
std::vector< res_window< T > * > res_windows
Definition: TileComponentWindowBuffer.h:508
@ SPLIT_NUM_ORIENTATIONS
Definition: T1Structs.h:32
T height() const
Definition: util.h:165
grk_rect_u32 m_bounds
Definition: TileComponentWindowBuffer.h:502
@ BAND_NUM_ORIENTATIONS
Definition: T1Structs.h:41
grk_buffer_2d< T > * tile_buf() const
Definition: TileComponentWindowBuffer.h:494
grk_rectangle< T > pan(int64_t x, int64_t y) const
Definition: util.h:169
grk_buffer_2d< T > * resWindowTopLevel
Definition: TileComponentWindowBuffer.h:248
uint32_t filterWidth
Definition: TileComponentWindowBuffer.h:249
Resolution * fullRes
Definition: TileComponentWindowBuffer.h:240
T x1
Definition: util.h:76
bool is_valid(void) const
Definition: util.h:91
bool wholeTileDecompress
Definition: TileComponentWindowBuffer.h:514
uint8_t getBandIndex(uint8_t resno, eBandOrientation orientation) const
Definition: TileComponentWindowBuffer.h:475
uint64_t strided_area(void) const
Definition: TileComponentWindowBuffer.h:450
grk_buffer_2d< T > * resWindow
Definition: TileComponentWindowBuffer.h:247
const grk_rect_u32 getPaddedTileBandWindow(uint8_t resno, eBandOrientation orientation) const
Definition: TileComponentWindowBuffer.h:392
grk_rect_u32 unreduced_bounds() const
Definition: TileComponentWindowBuffer.h:446
Definition: TileComponentWindowBuffer.h:266
~res_window()
Definition: TileComponentWindowBuffer.h:121
@ BAND_ORIENT_HL
Definition: T1Structs.h:38
grk_rectangle< T > & grow(T boundary)
Definition: util.h:175
const grk_buffer_2d< T > * getWindow(uint32_t resno) const
Get resolution window.
Definition: TileComponentWindowBuffer.h:415
@ BAND_ORIENT_LH
Definition: T1Structs.h:39
TileComponentWindowBuffer(bool isCompressor, bool lossless, bool wholeTileDecompress, grk_rect_u32 unreduced_tile_dim, grk_rect_u32 reduced_tile_dim, grk_rect_u32 unreduced_window_dim, Resolution *tile_comp_resolutions, uint8_t numresolutions, uint8_t reduced_num_resolutions)
Definition: TileComponentWindowBuffer.h:267
T width() const
Definition: util.h:162
const grk_buffer_2d< T > * getWindow(void) const
Get tile window.
Definition: TileComponentWindowBuffer.h:424
const grk_buffer_2d< T > * getWindow(uint8_t resno, eBandOrientation orientation) const
Get non-LL band window.
Definition: TileComponentWindowBuffer.h:388
Subband band[BAND_NUM_INDICES]
Definition: T1Structs.h:240
@ SPLIT_L
Definition: T1Structs.h:30
~TileComponentWindowBuffer()
Definition: TileComponentWindowBuffer.h:331
bool alloc(bool clear)
Definition: TileComponentWindowBuffer.h:129
bool allocated
Definition: TileComponentWindowBuffer.h:238
void transfer(T **buffer, bool *owns, uint32_t *stride)
Definition: TileComponentWindowBuffer.h:459
void transform(uint8_t resno, eBandOrientation orientation, uint32_t &offsetx, uint32_t &offsety) const
Tranform code block offsets.
Definition: TileComponentWindowBuffer.h:345
Copyright (C) 2016-2020 Grok Image Compression Inc.
Definition: BitIO.cpp:23
uint32_t numBandWindows
Definition: T1Structs.h:241
uint8_t num_resolutions
Definition: TileComponentWindowBuffer.h:511
@ BAND_ORIENT_HH
Definition: T1Structs.h:40
grk_rectangle< uint32_t > grk_rect_u32
Definition: util.h:48
Resolution * fullResLower
Definition: TileComponentWindowBuffer.h:242
grk_rectangle< T > intersection(const grk_rectangle< T > rhs) const
Definition: util.h:137
static grk_rect_u32 getBandWindowRect(uint8_t num_res, uint8_t resno, uint8_t orientation, grk_rect_u32 unreduced_window)
Note: for 0th resolution, band window (and there is only one) is equal to resolution window.
Definition: TileComponentWindowBuffer.h:200
bool alloc()
Definition: TileComponentWindowBuffer.h:428
const grk_buffer_2d< T > * getCodeBlockDestWindow(uint8_t resno, eBandOrientation orientation) const
Get code block destination window.
Definition: TileComponentWindowBuffer.h:377
std::vector< grk_rect_u32 > paddedTileBandWindow
Definition: TileComponentWindowBuffer.h:244
Definition: T1Structs.h:231
std::vector< Resolution * > resolutions
Definition: TileComponentWindowBuffer.h:505
grk_rectangle< T > rectceildivpow2(uint32_t power) const
Definition: util.h:125
grk_buffer_2d< T > * splitWindow[SPLIT_NUM_ORIENTATIONS]
Definition: TileComponentWindowBuffer.h:246
eBandOrientation
Definition: T1Structs.h:36
@ BAND_INDEX_HL
Definition: T1Structs.h:54
T x0
Definition: util.h:76
bool use_band_windows() const
Definition: TileComponentWindowBuffer.h:466
eSplitOrientation
Definition: T1Structs.h:29
T y1
Definition: util.h:76
@ BAND_INDEX_HH
Definition: T1Structs.h:55
Class to manage multiple buffers needed to perform DWT transform.
Definition: TileComponentWindowBuffer.h:29
grk_rect_u32 bounds() const
Get bounds of tile component decompress: reduced tile component coordinates of window compress: unred...
Definition: TileComponentWindowBuffer.h:442
grk_buffer_2d< T > * band_window(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:487
bool m_compress
Definition: TileComponentWindowBuffer.h:513
const grk_buffer_2d< T > * getSplitWindow(uint8_t resno, eSplitOrientation orientation) const
Definition: TileComponentWindowBuffer.h:403
res_window(uint8_t numresolutions, uint8_t resno, grk_buffer_2d< T > *top, Resolution *full_res, Resolution *lower_full_res, grk_rect_u32 bounds, grk_rect_u32 unreduced_bounds, uint32_t HORIZ_PASS_HEIGHT, uint32_t FILTER_WIDTH)
Definition: TileComponentWindowBuffer.h:31
@ SPLIT_H
Definition: T1Structs.h:31
T y0
Definition: util.h:76
@ BAND_ORIENT_LL
Definition: T1Structs.h:37
void attach(T *buffer, uint32_t stride)
Definition: TileComponentWindowBuffer.h:455