49 return lossless ? 1 : 2;
53struct TileComponentWindowBase
56 grk_rect32 unreducedTileComp, grk_rect32 reducedTileComp,
58 uint8_t reducedNumResolutions)
62 assert(reducedNumResolutions > 0);
63 auto currentRes = unreducedTileComp;
67 ResSimple r(currentRes, finalResolution);
70 currentRes = ResSimple::getBandWindow(1, 0, currentRes);
77 bounds_ = unreducedImageCompWindow.scaleDownCeilPow2(
83 auto tileCompAtRes =
resolution_[reducedNumResolutions - 1];
84 auto tileCompAtLowerRes =
85 reducedNumResolutions > 1 ?
resolution_[reducedNumResolutions - 2] : ResSimple();
87 auto highestResWindow =
new ResWindow<T>(
88 numresolutions, (uint8_t)(reducedNumResolutions - 1U),
nullptr, tileCompAtRes,
93 highestResWindow->disableBandWindowAllocation();
103 useBandWindows() ?
nullptr : highestResWindow->getResWindowBufferREL(),
110 virtual ~TileComponentWindowBase()
140 bool useBandWindows()
const
159struct TileComponentWindow :
public TileComponentWindowBase<T>
163 grk_rect32 unreducedTileComp, grk_rect32 reducedTileComp,
165 uint8_t reducedNumResolutions)
166 : TileComponentWindowBase<T>(isCompressor, lossless,
wholeTileDecompress, unreducedTileComp,
168 reducedNumResolutions)
171 ~TileComponentWindow() =
default;
187 void toRelativeCoordinates(uint8_t
resno, eBandOrientation
orientation, uint32_t& offsetx,
188 uint32_t& offsety)
const
199 if(useBufferCoordinatesForCodeblock() &&
resno > 0)
204 offsetx += resLower.width();
206 offsety += resLower.height();
211 DecompressBlockExec* block)
213 grk_buf2d<int32_t, AllocatorAligned> dst;
215 dst.copyFrom<F>(src, F(block));
234 return this->
resWindows[0]->getResWindowBufferREL();
236 return this->
resWindows[
resno]->getBandWindowBufferPaddedREL(orientation);
247 const grk_buf2d_simple<int32_t>
248 getBandWindowBufferPaddedSimple(uint8_t
resno, eBandOrientation
orientation)
const
254 return this->
resWindows[0]->getResWindowBufferSimple();
256 return this->
resWindows[
resno]->getBandWindowBufferPaddedSimple(orientation);
267 const grk_buf2d_simple<float>
268 getBandWindowBufferPaddedSimpleF(uint8_t
resno, eBandOrientation
orientation)
const
274 return this->
resWindows[0]->getResWindowBufferSimpleF();
276 return this->
resWindows[
resno]->getBandWindowBufferPaddedSimpleF(orientation);
300 return this->
resWindows[
resno]->getResWindowBufferSplitREL(orientation);
307 const grk_buf2d_simple<int32_t>
308 getResWindowBufferSplitSimple(uint8_t
resno, eSplitOrientation
orientation)
const
318 const grk_buf2d_simple<float>
319 getResWindowBufferSplitSimpleF(uint8_t
resno, eSplitOrientation
orientation)
const
340 const grk_buf2d_simple<int32_t> getResWindowBufferSimple(uint32_t
resno)
const
342 return getResWindowBufferREL(
resno)->simple();
350 const grk_buf2d_simple<float> getResWindowBufferSimpleF(uint32_t
resno)
const
352 return getResWindowBufferREL(
resno)->simpleF();
360 uint32_t getResWindowBufferHighestStride(
void)
const
362 return getResWindowBufferHighestREL()->stride;
370 grk_buf2d_simple<int32_t> getResWindowBufferHighestSimple(
void)
const
372 return getResWindowBufferHighestREL()->simple();
379 grk_buf2d_simple<float> getResWindowBufferHighestSimpleF(
void)
const
381 return getResWindowBufferHighestREL()->simpleF();
383 uint64_t stridedArea(
void)
const
385 auto win = getResWindowBufferHighestREL();
386 return win->stride * win->height();
390 void attach(T*
buffer, uint32_t stride)
392 getResWindowBufferHighestREL()->attach(
buffer, stride);
395 void transfer(T**
buffer, uint32_t* stride)
397 getResWindowBufferHighestREL()->transfer(
buffer, stride);
410 return (useBufferCoordinatesForCodeblock())
411 ? getResWindowBufferHighestREL()
421 return this->
resWindows.back()->getResWindowBufferREL();
423 bool useBufferCoordinatesForCodeblock()
const
uint8_t resno
Definition BlockExec.h:53
eBandOrientation bandOrientation
Definition BlockExec.h:33
uint8_t numresolutions
number of resolutions
Definition CodingParams.h:58
uint8_t * buffer
packet header storage original buffer
Definition PPMMarker.h:64
grk_rect32 bounds_
Definition Precinct.h:57
grk_buf2d< T, AllocatorAligned > Buf2dAligned
Definition ResWindow.h:73
grk_rect32 bounds
Definition SparseCanvas.h:275
bool wholeTileDecompress
Definition TileComponent.h:56
grk_rect32 unreducedBounds_
Definition TileComponentWindow.h:149
bool compress_
Definition TileComponentWindow.h:154
std::vector< ResSimple > resolution_
Definition TileComponentWindow.h:153
std::vector< ResWindow< T > * > resWindows
Definition TileComponentWindow.h:145
bool wholeTileDecompress_
Definition TileComponentWindow.h:155
grk_rect< uint32_t > grk_rect32
Definition TileCache.h:61
Copyright (C) 2016-2023 Grok Image Compression Inc.
Definition ICacheable.h:20
constexpr T getFilterPad(bool lossless)
Definition TileComponentWindow.h:47
uint8_t orientation
Definition plugin_interface.h:42