70 uint32_t& offsetx, uint32_t& offsety)
const = 0;
74 virtual void attachData(
void* data, uint32_t stride) = 0;
91 return lossless ? 1 : 2;
99 Rect32 unreducedImageCompWindow, uint8_t numresolutions,
100 uint8_t reducedNumResolutions)
104 assert(reducedNumResolutions > 0);
105 auto currentRes = unreducedTileComp;
106 for(uint8_t i = 0; i < numresolutions; ++i)
108 bool finalResolution = i == numresolutions - 1;
109 ResSimple r(currentRes, finalResolution);
120 (uint8_t)(numresolutions - reducedNumResolutions));
125 auto tileCompAtRes =
resolution_[reducedNumResolutions - 1];
126 auto tileCompAtLowerRes =
130 numresolutions, (uint8_t)(reducedNumResolutions - 1U),
nullptr, tileCompAtRes,
135 highestResWindow->disableBandWindowAllocation();
138 for(uint8_t resno = 0; resno < reducedNumResolutions - 1; ++resno)
145 useBandWindows() ?
nullptr : highestResWindow->getResWindowBufferREL(),
173 [
this](
const auto& b) { return b->alloc(!compress_); });
201 Rect32 unreducedImageCompWindow, uint8_t numresolutions,
202 uint8_t reducedNumResolutions)
204 reducedTileComp, unreducedImageCompWindow, numresolutions,
205 reducedNumResolutions)
225 uint32_t& offsety)
const override
230 auto band = res.tileBand +
getBandIndex(resno, orientation);
233 assert(offsetx >= band->x0);
234 assert(offsety >= band->y0);
243 offsetx += resLower.width();
245 offsety += resLower.height();
258 template<
typename SrcT,
template<
class>
class SrcA,
typename F>
264 dst.template copyFromNarrow<SrcT, SrcA, F>(&src, F(block));
283 return this->
resWindows[0]->getResWindowBufferREL();
285 return this->
resWindows[resno]->getBandWindowBufferPaddedREL(orientation);
303 return this->
resWindows[0]->getResWindowBufferSimple();
305 return this->
resWindows[resno]->getBandWindowBufferPaddedSimple(orientation);
323 return this->
resWindows[0]->getResWindowBufferSimpleF();
325 return this->
resWindows[resno]->getBandWindowBufferPaddedSimpleF(orientation);
337 return this->
resWindows[resno]->getBandWindowPadded(orientation);
346 assert(resno > 0 && resno < this->
resolution_.size());
348 return this->
resWindows[resno]->getResWindowBufferSplitREL(orientation);
380 return this->
resWindows[resno]->getResWindowBufferREL();
447 T* typedData =
nullptr;
453 attach(
static_cast<T*
>(data), stride);
462 return (uint64_t)win->getStride() * win->height();
478 return this->
resWindows.back()->getResWindowBufferREL();
486 return resno > 0 ? (uint8_t)orientation - 1 : 0;
496 auto cblk = block->
cblk;
498 uint32_t x = block->
x;
499 uint32_t y = block->
y;
501 auto blockBounds =
Rect32(x, y, x + cblk->width(), y + cblk->height());
503 if constexpr(std::is_same_v<T, int16_t>)
507 (uint16_t)cblk->width(), cblk->height());
508 if(!empty && !regionWindow)
510 src.setRect(blockBounds);
559 src.setRect(blockBounds);
577 regionWindow->
write(block->
resno, blockBounds, empty ?
nullptr : srcData, 1,
578 blockBounds.width());
587 auto cblk = block->
cblk;
589 uint32_t x = block->
x;
590 uint32_t y = block->
y;
592 auto blockBounds =
Rect32(x, y, x + cblk->width(), y + cblk->height());
594 if constexpr(std::is_same_v<T, int16_t>)
599 if(!empty && !regionWindow)
601 src.setRect(blockBounds);
639 src.template copyFrom<t1::ojph::RoiShiftOJPHFilter<T>>(
642 src.template copyFrom<t1::ojph::RoiScaleOJPHFilter<T>>(
648 src.template copyFrom<t1::ojph::ShiftOJPHFilter<T>>(
651 src.template copyFrom<t1::ojph::ScaleOJPHFilter<T>>(
657 src.setRect(blockBounds);
679 regionWindow->
write(block->
resno, blockBounds, empty ?
nullptr : srcData, 1,
680 blockBounds.width());
Definition ISparseCanvas.h:42
virtual bool write(uint8_t resno, Rect32 window, const T *src, const uint32_t srcChunkY, const uint32_t srcChunkX)=0
Write window of data from src buffer.
Definition PostDecodeFilters.h:63
Definition PostDecodeFilters.h:27
Definition PostDecodeFilters.h:90
Definition PostDecodeFilters.h:51
Definition PostDecodeFiltersOJPH.h:196
Definition PostDecodeFiltersOJPH.h:139
Definition PostDecodeFiltersOJPH.h:167
Definition PostDecodeFiltersOJPH.h:121
Definition PostDecodeFiltersOJPH.h:70
Definition PostDecodeFiltersOJPH.h:26
Definition PostDecodeFiltersOJPH.h:98
Definition PostDecodeFiltersOJPH.h:51
eBandOrientation
Definition t1_common.h:28
@ BAND_ORIENT_LL
Definition t1_common.h:29
ResWindow.
Definition CompressedChunkCache.h:36
eSplitOrientation
Definition ResWindow.h:57
constexpr T getFilterPad(bool lossless)
Definition TileComponentWindow.h:89
Rect< uint32_t > Rect32
Definition geometry.h:64
void attach(T *buffer, uint32_t strd)
Definition buffer.h:435
void copyFrom(const Buffer2d &src, F filter)
Definition buffer.h:477
uint32_t getStride()
Definition buffer.h:543
Buffer2dSimple< float > simpleF(void) const
Definition buffer.h:363
void transfer(T **buffer, uint32_t *strd)
Definition buffer.h:465
Buffer2dSimple< T > simple(void) const
Definition buffer.h:359
Type-erased interface for tile component windows.
Definition TileComponentWindow.h:58
virtual void attachData(void *data, uint32_t stride)=0
virtual uint64_t stridedArea() const =0
virtual Rect32 unreducedBounds() const =0
virtual Rect32 bounds() const =0
virtual const Rect32 * getBandWindowPadded(uint8_t resno, t1::eBandOrientation orientation) const =0
virtual void postProcessBlockHT(int32_t *srcData, t1::DecompressBlockExec *block, uint16_t stride, ISparseCanvas< int32_t > *regionWindow)=0
virtual void transferData(void **data, uint32_t *stride)=0
virtual void postProcessBlock(int32_t *srcData, t1::DecompressBlockExec *block, ISparseCanvas< int32_t > *regionWindow)=0
virtual uint32_t highestResStride() const =0
virtual ~ITileComponentWindow()=default
virtual void toRelativeCoordinates(uint8_t resno, t1::eBandOrientation orientation, uint32_t &offsetx, uint32_t &offsety) const =0
Rect< T > intersection(const Rect< T > &rhs) const
Definition geometry.h:347
Rect< T > scaleDownCeilPow2(uint8_t power) const
Definition geometry.h:335
Definition ResSimple.h:26
static Rect32 getBandWindow(uint8_t numDecomps, uint8_t orientation, Rect32 tileCompWindowUnreduced)
Get band window (in tile component coordinates) for specified number of decompositions.
Definition ResSimple.h:60
Definition ResWindow.h:70
Rect32 unreducedBounds() const override
Definition TileComponentWindow.h:166
Rect32 unreducedBounds_
Definition TileComponentWindow.h:186
bool wholeTileDecompress_
Definition TileComponentWindow.h:192
bool compress_
Definition TileComponentWindow.h:191
TileComponentWindowBase(bool isCompressor, bool lossless, bool wholeTileDecompress, Rect32 unreducedTileComp, Rect32 reducedTileComp, Rect32 unreducedImageCompWindow, uint8_t numresolutions, uint8_t reducedNumResolutions)
Definition TileComponentWindow.h:97
Rect32 bounds_
Definition TileComponentWindow.h:187
Rect32 bounds() const override
Get bounds of tile component (canvas coordinates) decompress: reduced canvas coordinates of window co...
Definition TileComponentWindow.h:162
virtual ~TileComponentWindowBase()
Definition TileComponentWindow.h:152
bool alloc() override
Definition TileComponentWindow.h:170
std::vector< ResWindow< T > * > resWindows
Definition TileComponentWindow.h:182
std::vector< ResSimple > resolution_
Definition TileComponentWindow.h:190
bool useBandWindows() const
Definition TileComponentWindow.h:177
const Buffer2dSimple< T > getResWindowBufferSimple(uint8_t resno) const
Get resolution window.
Definition TileComponentWindow.h:388
Buffer2dSimple< float > getResWindowBufferHighestSimpleF(void) const
Get highest resolution window.
Definition TileComponentWindow.h:427
uint64_t stridedArea() const override
Definition TileComponentWindow.h:459
const Buffer2dSimple< T > getBandWindowBufferPaddedSimple(uint8_t resno, t1::eBandOrientation orientation) const
Get padded band window buffer.
Definition TileComponentWindow.h:296
~TileComponentWindow() override=default
const Rect32 * getBandWindowPadded(uint8_t resno, t1::eBandOrientation orientation) const override
Get padded band window.
Definition TileComponentWindow.h:335
Buf2dAligned * getResWindowBufferHighestREL(void) const
Definition TileComponentWindow.h:476
const Buffer2dSimple< float > getResWindowBufferSimpleF(uint8_t resno) const
Get resolution window.
Definition TileComponentWindow.h:398
Buffer2d< T, AllocatorAligned > Buf2dAligned
Definition TileComponentWindow.h:198
void toRelativeCoordinates(uint8_t resno, t1::eBandOrientation orientation, uint32_t &offsetx, uint32_t &offsety) const override
Transform code block offsets from canvas coordinates to either band coordinates (relative to sub band...
Definition TileComponentWindow.h:224
const Buf2dAligned * getResWindowBufferSplitREL(uint8_t resno, eSplitOrientation orientation) const
Definition TileComponentWindow.h:344
const Buf2dAligned * getBandWindowBufferPaddedREL(uint8_t resno, t1::eBandOrientation orientation) const
Get padded band window buffer.
Definition TileComponentWindow.h:276
void transfer(T **buffer, uint32_t *stride)
Definition TileComponentWindow.h:438
uint32_t highestResStride() const override
Definition TileComponentWindow.h:455
void transferData(void **data, uint32_t *stride) override
Definition TileComponentWindow.h:445
const Buf2dAligned * getResWindowBufferREL(uint8_t resno) const
Get resolution window.
Definition TileComponentWindow.h:378
TileComponentWindow(bool isCompressor, bool lossless, bool wholeTileDecompress, Rect32 unreducedTileComp, Rect32 reducedTileComp, Rect32 unreducedImageCompWindow, uint8_t numresolutions, uint8_t reducedNumResolutions)
Definition TileComponentWindow.h:199
const Buffer2dSimple< T > getResWindowBufferSplitSimple(uint8_t resno, eSplitOrientation orientation) const
Definition TileComponentWindow.h:355
const Buffer2dSimple< float > getBandWindowBufferPaddedSimpleF(uint8_t resno, t1::eBandOrientation orientation) const
Get padded band window buffer.
Definition TileComponentWindow.h:317
uint32_t getResWindowBufferHighestStride(void) const
Get highest resolution window.
Definition TileComponentWindow.h:408
const Buffer2dSimple< float > getResWindowBufferSplitSimpleF(uint8_t resno, eSplitOrientation orientation) const
Definition TileComponentWindow.h:366
uint8_t getBandIndex(uint8_t resno, t1::eBandOrientation orientation) const
Definition TileComponentWindow.h:484
bool useBufferCoordinatesForCodeblock() const
Definition TileComponentWindow.h:480
void postProcessBlockHT(int32_t *srcData, t1::DecompressBlockExec *block, uint16_t stride, ISparseCanvas< int32_t > *regionWindow) override
Definition TileComponentWindow.h:583
Buffer2dSimple< T > getResWindowBufferHighestSimple(void) const
Get highest resolution window.
Definition TileComponentWindow.h:418
void attach(T *buffer, uint32_t stride)
Definition TileComponentWindow.h:433
const Buf2dAligned * getCodeBlockDestWindowREL(uint8_t resno, t1::eBandOrientation orientation) const
Definition TileComponentWindow.h:470
void postProcessBlock(int32_t *srcData, t1::DecompressBlockExec *block, ISparseCanvas< int32_t > *regionWindow) override
Definition TileComponentWindow.h:493
void postProcess(Buf2dAligned &src, uint8_t resno, t1::eBandOrientation bandOrientation, t1::DecompressBlockExec *block)
Definition TileComponentWindow.h:249
void postProcessNarrow(Buffer2d< SrcT, SrcA > &src, uint8_t resno, t1::eBandOrientation bandOrientation, t1::DecompressBlockExec *block)
Definition TileComponentWindow.h:259
void attachData(void *data, uint32_t stride) override
Definition TileComponentWindow.h:451
uint32_t x
Definition BlockExec.h:45
uint8_t qmfbid
Definition BlockExec.h:43
uint32_t y
Definition BlockExec.h:46
eBandOrientation bandOrientation
Definition BlockExec.h:40
bool dataChunksEmpty()
Definition CodeblockDecompress.h:86
Definition BlockExec.h:64
uint8_t roishift
Definition BlockExec.h:116
uint8_t resno
Definition BlockExec.h:115
CodeblockDecompress * cblk
Definition BlockExec.h:114