|
Grok 20.3.2
|
Manages decompression. More...
#include <CodeStreamDecompress.h>
Classes | |
| struct | PendingBand_ |
Public Member Functions | |
| CodeStreamDecompress (IStream *stream) | |
| Constructs a CodeStreamDecompress. | |
| ~CodeStreamDecompress () | |
| Destroys a CodeStreamDecompress. | |
| void | init (grk_decompress_parameters *param) override |
| Initializes decompressor. | |
| void | setBandCallback (grk_io_band_callback callback, void *user_data) override |
| Sets a band-completion callback for incremental writing. | |
| grk_io_band_callback | getBandCallback () const override |
| void * | getBandUserData () const override |
| grk_progression_state | getProgressionState (uint16_t tile_index) override |
| Gets the grk_progression_state for a tile. | |
| bool | setProgressionState (grk_progression_state state) override |
| Sets the grk_progression_state for a tile. | |
| ITileProcessor * | getTileProcessor (uint16_t tile_index) |
| Gets tile processor for specified tile index. | |
| void | initTilesToDecompress (Rect16 region) |
| Initializes tile completeness set. | |
| void | setNumComponents (uint16_t numComps) |
| bool | initDefaultTCP () |
| Initializes default TileCodingParams. | |
| bool | readHeader (grk_header_info *header_info) override |
| Reads header. | |
| bool | needsHeaderRead (void) const |
| Checks if header needs to be read. | |
| GrkImage * | getImage (uint16_t tile_index, bool wait) override |
| Gets GrkImage for specified tile. | |
| GrkImage * | getImage (void) override |
| Gets composite GrkImage for all tiles in decompress region. | |
| GrkImage * | getCompositeNoWait (void) |
| GrkImage * | getHeaderImage (void) |
| Gets header GrkImage (where main and tile header information is stored). | |
| bool | decompress (grk_plugin_tile *tile) override |
| Decompresses image / image region. | |
| bool | decompressTile (uint16_t tile_index) override |
| Single Tile ////////////////////////////////////////////////////. | |
| bool | postProcess (GrkImage *img) |
| Post processes decompressed image. | |
| void | dump (uint32_t flag, FILE *outputFileStream) override |
| Dumps image tags to file. | |
| void | wait (grk_wait_swath *swath) override |
| Wait for tile decompression to complete. | |
| void | scheduleSwathCopy (const grk_wait_swath *swath, grk_swath_buffer *buf) override |
| Schedule SIMD-accelerated tile-to-swath copies for decoded tiles. | |
| void | waitSwathCopy () override |
| Wait for all in-flight swath copy tasks to complete. | |
| void | setPostPostProcess (std::function< bool(GrkImage *)> func) |
| Sets the Post Post Process object. | |
| Public Member Functions inherited from grk::CodeStream | |
| CodeStream (IStream *stream) | |
| virtual | ~CodeStream () |
| IStream * | getStream () |
| GrkImage * | getHeaderImage (void) |
| grk_plugin_tile * | getCurrentPluginTile () |
| CodingParams * | getCodingParams (void) |
| Public Member Functions inherited from grk::IDecompressor | |
| virtual | ~IDecompressor ()=default |
| Destroys the IDecompressor object. | |
| virtual uint32_t | getNumSamples (void) |
| virtual bool | decompressSample (uint32_t sampleIndex) |
| virtual GrkImage * | getSampleImage (uint32_t sampleIndex) |
| virtual GrkImage * | getSampleTileImage (uint32_t sampleIndex, uint16_t tileIndex) |
Protected Member Functions | |
| bool | setDecompressRegion (RectD region) |
| Sets the decompress region. | |
| bool | decompressImpl (std::set< uint16_t > pendingTiles) |
| Decompresses all tiles. | |
| bool | decompressTileImpl (uint16_t tile_index) |
| void | dumpMainHeader (FILE *outputFileStream) |
| Dumps main header info to file. | |
| void | dumpImageHeader (GrkImage *image, bool dev_dump_flag, FILE *outputFileStream) |
| Dumps an image header structure. | |
| void | dumpTileHeader (TileCodingParams *defaultTile, uint32_t numcomps, FILE *outputFileStream) |
| Dumps tile info to file. | |
| void | dumpImageComponentHeader (grk_image_comp *comp, bool dev_dump_flag, FILE *outputFileStream) |
| Dumps a component image header structure. | |
| Protected Member Functions inherited from grk::CodeStream | |
| bool | exec (std::vector< PROCEDURE_FUNC > &procedureList) |
Private Member Functions | |
| void | postReadHeader (void) |
| void | onRowCompleted (uint16_t tileIndexBegin) |
| void | scheduleTileBatch () |
| void | wait (uint16_t tile_index) |
| void | decompressSequentialPrepare (void) |
| Prepares to read first slated tile part. | |
| bool | schedule (ITileProcessor *tileProcessor, bool multiTile) |
| bool | sequentialParseAndSchedule (bool multiTile) |
| Parses next slated tile. | |
| bool | readUNK (void) |
| Reads unknown marker. | |
| void | differentialUpdate (GrkImage *scratch) |
| Updates differential decompress state. | |
| bool | readCBD (uint8_t *headerData, uint16_t headerSize) |
| Reads a CBD marker (Component bit depth definition). | |
| bool | readHeaderProcedure (void) |
| Reads header - all markers until first SOT. | |
| bool | readSOC () |
| Reads a SOC marker (Start of Codestream). | |
| bool | readSIZ (uint8_t *headerData, uint16_t headerSize) |
| Reads a SIZ marker (image and tile size). | |
| bool | readCAP (uint8_t *headerData, uint16_t headerSize) |
| Reads a CAP marker. | |
| bool | readCRG (uint8_t *headerData, uint16_t headerSize) |
| Reads a CRG marker (Component registration). | |
| bool | readTLM (uint8_t *headerData, uint16_t headerSize) |
| Reads a TLM marker (Tile Length Marker). | |
| bool | readPLM (uint8_t *headerData, uint16_t headerSize) |
| Reads a PLM marker (Packet length, main header marker). | |
| bool | readPPM (uint8_t *headerData, uint16_t headerSize) |
| Reads a PPM marker (Packed headers, main header). | |
| bool | readSOT (uint8_t *headerData, uint16_t headerSize) |
| Read SOT (Start of tile part) marker. | |
| bool | mergePpm (CodingParams *p_cp) |
| Merges all PPM markers read (Packed headers, main header). | |
| bool | activateScratch (bool singleTile, GrkImage *scratch) |
| Activates scratch image. | |
| std::function< void()> | postMultiTile (ITileProcessor *tileProcessor) |
| Creates a Post Task object. | |
| std::function< void()> | postMultiTile (void) |
| Final post-processing lambda, executed by wait(nullptr) after all tiles complete. | |
| std::function< void()> | postSingleTile (ITileProcessor *tileProcessor) |
| std::function< bool()> | genDecompressTileTLMTask (ITileProcessor *tileProcessor, const std::shared_ptr< TPFetchSeq > &tilePartFetchSeq, Rect32 unreducedImageBounds, std::function< std::function< void()>(ITileProcessor *)> postGenerator) |
| void | decompressSequential (const std::set< uint16_t > &pendingTiles) |
| void | decompressTLM (const std::set< uint16_t > &pendingTiles) |
| bool | startTLMDecompress (std::set< uint16_t > &pendingTiles) |
| bool | startSequentialDecompress (std::set< uint16_t > &pendingTiles) |
| bool | doTileBatching (void) |
| bool | fetchByTile (std::set< uint16_t > &slated, Rect32 unreducedImageBounds, std::function< std::function< void()>(ITileProcessor *)> postGenerator) |
| uint16_t | batchTileHeadroomIncrement (uint16_t numRows, uint16_t tilesLeft) |
| void | startDecompressConsumer (uint16_t maxInFlight) |
| bool | batchDequeueSequential (void) |
Private Attributes | |
| MarkerParser | markerParser_ |
| MarkerParser | |
| TileWindow | tilesToDecompress_ |
| TileWindow | |
| std::unique_ptr< MarkerCache > | markerCache_ |
| MarkerCache | |
| ITileProcessor * | currTileProcessor_ = nullptr |
| Tile processor currently being parsed. | |
| TilePartInfo | currTilePartInfo_ |
| int32_t | currTileIndex_ = -1 |
| std::unique_ptr< TileCodingParams > | defaultTcp_ |
| Default TileCodingParams. | |
| bool | headerError_ = false |
| true if there was an error reading the main header | |
| bool | headerRead_ = false |
| true if main header was successfully read | |
| std::unique_ptr< GrkImage, RefCountedDeleter< GrkImage > > | multiTileComposite_ |
| multi tile composite GrkImage Used to composite multiple tiles - subsampled and reduced for region decompression | |
| Rect32 | region_ |
| Holds unreduced unsubsampled decompress region , if set. | |
| std::function< void()> | postMulti_ |
| std::unique_ptr< TileCache > | tileCache_ |
| TileCache | |
| grk_io_pixels_callback | ioBufferCallback_ = nullptr |
| callback for io pixels | |
| void * | ioUserData_ = nullptr |
| io user data | |
| grk_io_band_callback | ioBandCallback_ = nullptr |
| callback invoked when a tile-row band is ready for incremental writing | |
| void * | ioBandUserData_ = nullptr |
| std::mutex | bandOrderMutex_ |
| std::condition_variable | bandDrainCV_ |
| uint16_t | nextBandTileY_ = 0 |
| std::map< uint16_t, PendingBand_ > | pendingBands_ |
| grk_io_register_reclaim_callback | grkRegisterReclaimCallback_ = nullptr |
| callback to reclaim io buffers | |
| std::function< bool(GrkImage *)> | postPostProcess_ |
| post post-decompress method | |
| TileFutureManager | decompressTileFutureManager_ |
| futures for scheduled tiles | |
| TileFutureManager | swathCopyFutureManager_ |
| futures for swath copy tasks scheduled via scheduleSwathCopy() | |
| std::shared_ptr< TPFetchSeq > | tilePartFetchFlat_ |
| std::shared_ptr< std::unordered_map< uint16_t, std::shared_ptr< TPFetchSeq > > > | tilePartFetchByTile_ |
| std::vector< std::future< bool > > | fetchByTileFutures_ |
| std::unique_ptr< GrkImage, RefCountedDeleter< GrkImage > > | scratchImage_ |
| Scratch GrkImage for decompressor This image may composite multiple tiles, if needed. | |
| std::unique_ptr< GrkImage, std::function< void(GrkImage *)> > | activeImage_ |
| std::atomic< bool > | success_ {true} |
| track success of scheduled tile decompression | |
| std::atomic< uint32_t > | numTilesDecompressed_ {0} |
| number of decompressed tiles | |
| CoderPool | coderPool_ |
| pool of ICoder | |
| std::vector< std::unique_ptr< MarkerParser > > | tileMarkerParsers_ |
| bool | isHT_ = false |
| global HT flag | |
| std::unique_ptr< TileCompletion > | tileCompletion_ |
| std::thread | decompressWorker_ |
| std::function< bool(std::set< uint16_t > &)> | decompressStart_ |
| std::shared_ptr< ChunkBuffer<> > | chunkBuffer_ |
| std::unique_ptr< CompressedChunkCache > | compressedChunkCache_ |
| std::mutex | batchTileQueueMutex_ |
| std::condition_variable | batchTileQueueCondition_ |
| uint16_t | batchTileInitialRows_ = 2 |
| uint16_t | batchTileNextRows_ = 2 |
| std::queue< uint16_t > | batchTileQueueTLM_ |
| std::unique_ptr< ConcurrentQueue< std::function< void()> > > | decompressQueue_ |
| std::thread | decompressConsumer_ |
| std::mutex | decompressThrottleMutex_ |
| std::condition_variable | decompressThrottleCV_ |
| uint16_t | decompressInFlight_ = 0 |
| uint16_t | maxDecompressInFlight_ = 0 |
| std::atomic< int32_t > | maxFetchedTileRow_ {-1} |
| std::queue< ITileProcessor * > | batchTileQueueSequential_ |
| uint16_t | batchTileScheduleHeadroomSequential_ = 0 |
| uint16_t | batchTileUnscheduledSequential_ = 0 |
| int32_t | batchTileScheduledRows_ = 0 |
Static Private Attributes | |
| static constexpr int32_t | maxRowsAhead_ = 2 |
Additional Inherited Members | |
| Protected Attributes inherited from grk::CodeStream | |
| CodingParams | cp_ |
| std::vector< PROCEDURE_FUNC > | procedureList_ |
| std::vector< PROCEDURE_FUNC > | validationList_ |
| GrkImage * | headerImage_ |
| IStream * | stream_ |
| std::unordered_map< uint32_t, ITileProcessor * > | processors_ |
| grk_plugin_tile * | current_plugin_tile |
Manages decompression.
|
explicit |
Constructs a CodeStreamDecompress.
| stream | CodeStreamDecompress |
References grk::CAP, grk::CBD, grk::COC, grk::COD, grk::CodeStream::CodeStream(), grk::COM, grk::CodeStream::cp_, grk::CRG, defaultTcp_, grk_image_meta_new(), grk::CodeStream::headerImage_, markerCache_, markerParser_, grk::MCC, grk::MCO, grk::MCT, multiTileComposite_, TFSingleton::num_threads(), grk::PLM, grk::POC, grk::PPM, grk::QCC, grk::QCD, readCAP(), readCBD(), readCRG(), readPLM(), readPPM(), readSIZ(), readSOT(), readTLM(), grk::RGN, grk::SIZ, grk::SOT, tileCache_, tileMarkerParsers_, and grk::TLM.
|
inline |
Destroys a CodeStreamDecompress.
References decompressConsumer_, decompressQueue_, decompressWorker_, and TFSingleton::get().
|
private |
Activates scratch image.
| singleTile | |
| scratch |
References activateScratch(), grk::GrkImage::allocCompositeData(), grk::ceildiv(), grk::ceildivpow2(), grk::GrkImage::componentsEqual(), grk::CodeStream::cp_, defaultTcp_, GRK_INT_16, grk::CodeStream::headerImage_, ioBandCallback_, multiTileComposite_, region_, and tilesToDecompress_.
Referenced by activateScratch(), decompressImpl(), and decompressTileImpl().
|
private |
References batchDequeueSequential(), batchTileQueueSequential_, batchTileScheduleHeadroomSequential_, batchTileUnscheduledSequential_, schedule(), and success_.
Referenced by batchDequeueSequential(), and scheduleTileBatch().
|
private |
References batchTileHeadroomIncrement(), and tilesToDecompress_.
Referenced by batchTileHeadroomIncrement(), decompressTLM(), scheduleTileBatch(), and startSequentialDecompress().
|
overridevirtual |
Decompresses image / image region.
| tile | grk_plugin_tile |
Implements grk::IDecompressor.
References grk::ceildivpow2(), coderPool_, grk::CodeStream::cp_, grk::CodeStream::current_plugin_tile, currTileIndex_, currTilePartInfo_, currTileProcessor_, decompressSequentialPrepare(), decompressTileFutureManager_, GRK_DECODE_T1, grk::CodeStream::headerImage_, ioBandCallback_, markerParser_, multiTileComposite_, nextBandTileY_, pendingBands_, grk::CodeStream::stream_, success_, tileCache_, tileCompletion_, and tilesToDecompress_.
|
protected |
Decompresses all tiles.
References activateScratch(), compressedChunkCache_, grk::CodeStream::cp_, decompressImpl(), decompressStart_, differentialUpdate(), genDecompressTileTLMTask(), grk::CodeStream::headerImage_, numTilesDecompressed_, postMultiTile(), schedule(), scratchImage_, startSequentialDecompress(), startTLMDecompress(), success_, and tileCache_.
Referenced by decompressImpl().
|
private |
References chunkBuffer_, decompressSequential(), grk::grklog, grk::t1_t2::InvalidMarkerException::marker_, markerParser_, schedule(), sequentialParseAndSchedule(), grk::SOT, grk::CodeStream::stream_, success_, tileCache_, and tileCompletion_.
Referenced by decompressSequential(), and startSequentialDecompress().
|
private |
Prepares to read first slated tile part.
References grk::ACCESS_RANDOM, grk::CodeStream::cp_, decompressSequentialPrepare(), grk::MARKER_BYTES, markerCache_, markerParser_, grk::CodeStream::stream_, and tileCache_.
Referenced by decompress(), decompressSequentialPrepare(), decompressTileImpl(), and startSequentialDecompress().
|
overridevirtual |
Single Tile ////////////////////////////////////////////////////.
Implements grk::IDecompressor.
References grk::CodeStream::cp_, decompressTile(), decompressTileImpl(), grk::grklog, multiTileComposite_, tileCache_, and wait().
Referenced by decompressTile().
|
protected |
References activateScratch(), activeImage_, grk::ITileProcessor::allSOTMarkersParsed(), coderPool_, grk::CodeStream::cp_, grk::ITileProcessor::decompressFromCachedTileParts(), decompressSequentialPrepare(), decompressTileFutureManager_, decompressTileImpl(), grk::ITileProcessor::decompressWithTLM(), differentialUpdate(), fetchByTile(), grk::ITileProcessor::getNumProcessedPackets(), getTileProcessor(), grk::grklog, grk::CodeStream::headerImage_, grk::t1_t2::InvalidMarkerException::marker_, markerParser_, postSingleTile(), schedule(), scratchImage_, sequentialParseAndSchedule(), grk::SOT, tileCache_, tilePartFetchFlat_, and tilesToDecompress_.
Referenced by decompressTile(), and decompressTileImpl().
|
private |
References bandDrainCV_, bandOrderMutex_, batchTileHeadroomIncrement(), batchTileInitialRows_, batchTileQueueCondition_, batchTileQueueMutex_, batchTileQueueTLM_, batchTileScheduledRows_, decompressTLM(), doTileBatching(), getTileProcessor(), ioBandCallback_, nextBandTileY_, schedule(), success_, and tileCompletion_.
Referenced by decompressTLM(), and startTLMDecompress().
|
private |
Updates differential decompress state.
| scratch |
References grk::CodeStream::cp_, differentialUpdate(), grk::CodeStream::headerImage_, and grk::GrkImage::subsampleAndReduce().
Referenced by decompressImpl(), decompressTileImpl(), and differentialUpdate().
|
private |
References grk::CodeStream::cp_, doTileBatching(), and tilesToDecompress_.
Referenced by decompressTLM(), doTileBatching(), onRowCompleted(), sequentialParseAndSchedule(), startSequentialDecompress(), and wait().
|
overridevirtual |
Dumps image tags to file.
| flag | flag indicating main header, tile header etc. |
| outputFileStream | FILE stream |
Implements grk::IDecompressor.
References grk::CodeStream::cp_, dumpImageHeader(), dumpMainHeader(), dumpTileHeader(), getHeaderImage(), GRK_IMG_INFO, GRK_MH_IND, GRK_MH_INFO, GRK_TCH_INFO, grk::CodeStream::headerImage_, markerCache_, and tileCache_.
|
protected |
Dumps a component image header structure.
| comp | the component image header to dump. |
| dev_dump_flag | flag to describe if we are in the case of this function is use outside dump function |
| outputFileStream | output stream where dump the elements. |
Referenced by dumpImageHeader().
|
protected |
Dumps an image header structure.
| image | image header to dump. |
| dev_dump_flag | flag to describe if we are in the case of this function is use outside dump function |
| outputFileStream | output stream where dump the elements. |
References dumpImageComponentHeader().
Referenced by dump().
|
protected |
Dumps main header info to file.
| outputFileStream | output file stream |
References grk::CodeStream::cp_, defaultTcp_, dumpTileHeader(), and getHeaderImage().
Referenced by dump().
|
protected |
Dumps tile info to file.
| default_tile | |
| numcomps | |
| outputFileStream |
References grk::CCP_QNTSTY_SIQNT, grk::TileCodingParams::csty_, grk::TileCodingParams::mct_, grk::TileCodingParams::numLayers_, grk::TileCodingParams::prg_, and grk::TileCodingParams::tccps_.
Referenced by dump(), and dumpMainHeader().
|
private |
References grk::CodeStream::cp_, decompressInFlight_, decompressQueue_, decompressThrottleMutex_, fetchByTile(), fetchByTileFutures_, maxDecompressInFlight_, maxFetchedTileRow_, maxRowsAhead_, TFSingleton::num_threads(), startDecompressConsumer(), grk::CodeStream::stream_, and tileCompletion_.
Referenced by decompressTileImpl(), fetchByTile(), and startTLMDecompress().
|
private |
References coderPool_, decompressTileFutureManager_, grk::ITileProcessor::decompressWithTLM(), and genDecompressTileTLMTask().
Referenced by decompressImpl(), genDecompressTileTLMTask(), and schedule().
|
inlineoverridevirtual |
Reimplemented from grk::CodeStream.
References ioBandCallback_.
|
inlineoverridevirtual |
Reimplemented from grk::CodeStream.
References ioBandUserData_.
| GrkImage * grk::CodeStreamDecompress::getCompositeNoWait | ( | void | ) |
References getCompositeNoWait(), and multiTileComposite_.
Referenced by getCompositeNoWait().
| GrkImage * grk::CodeStreamDecompress::getHeaderImage | ( | void | ) |
Gets header GrkImage (where main and tile header information is stored).
References grk::CodeStream::headerImage_.
Referenced by dump(), dumpMainHeader(), and grk::SIZMarker::read().
|
overridevirtual |
Gets GrkImage for specified tile.
| tile_index | tile index |
Implements grk::IDecompressor.
References getImage(), tileCache_, and wait().
Referenced by getImage(), and getImage().
|
overridevirtual |
Gets composite GrkImage for all tiles in decompress region.
Implements grk::IDecompressor.
References getImage(), multiTileComposite_, and wait().
|
overridevirtual |
Gets the grk_progression_state for a tile.
| tile_index |
Implements grk::IDecompressor.
References getProgressionState(), and tileCache_.
Referenced by getProgressionState().
| ITileProcessor * grk::CodeStreamDecompress::getTileProcessor | ( | uint16_t | tile_index | ) |
Gets tile processor for specified tile index.
| tile_index | tile index |
References grk::CodeStream::cp_, defaultTcp_, getTileProcessor(), grk::CodeStream::headerImage_, region_, grk::CodeStream::stream_, and tileCache_.
Referenced by decompressTileImpl(), decompressTLM(), getTileProcessor(), readSOT(), and scheduleTileBatch().
|
overridevirtual |
Initializes decompressor.
Implements grk::IDecompressor.
References compressedChunkCache_, grk::CodeStream::cp_, GRK_TILE_CACHE_LRU, grkRegisterReclaimCallback_, ioBandCallback_, ioBandUserData_, ioBufferCallback_, ioUserData_, postReadHeader(), grk::CodeStream::stream_, and tileCache_.
| bool grk::CodeStreamDecompress::initDefaultTCP | ( | ) |
Initializes default TileCodingParams.
References defaultTcp_, grk::CodeStream::headerImage_, and initDefaultTCP().
Referenced by initDefaultTCP(), and grk::SIZMarker::read().
| void grk::CodeStreamDecompress::initTilesToDecompress | ( | Rect16 | region | ) |
Initializes tile completeness set.
| region | region to decompress |
References initTilesToDecompress(), and tilesToDecompress_.
Referenced by initTilesToDecompress(), and grk::SIZMarker::read().
|
private |
Merges all PPM markers read (Packed headers, main header).
| p_cp | main coding parameters. |
References grk::CodingParams::ppmMarkers_.
Referenced by readHeaderProcedure().
| bool grk::CodeStreamDecompress::needsHeaderRead | ( | void | ) | const |
Checks if header needs to be read.
References headerError_, and headerRead_.
|
private |
References doTileBatching(), maxRowsAhead_, onRowCompleted(), scheduleTileBatch(), and tileCompletion_.
Referenced by onRowCompleted().
|
private |
Creates a Post Task object.
Per-tile post-processing lambda, executed when each tile's decompression future completes.
| tileProcessor |
Calls post_decompressT2T1(scratchImage_) which:
References grk::CodeStream::cp_, decompressInFlight_, decompressThrottleCV_, decompressThrottleMutex_, grk::ITileProcessor::getImage(), grk::ITileProcessor::getIndex(), ioBandCallback_, maxDecompressInFlight_, numTilesDecompressed_, grk::ITileProcessor::post_decompressT2T1(), postMultiTile(), grk::ITileProcessor::release(), scratchImage_, grk::ITileProcessor::setBestEffortDecompressed(), grk::CodeStream::stream_, success_, and tileCompletion_.
Referenced by decompressImpl(), postMultiTile(), postMultiTile(), schedule(), and startTLMDecompress().
|
private |
Final post-processing lambda, executed by wait(nullptr) after all tiles complete.
For non-skipAllocateComposite mode: transfers pixel data from scratchImage_ to multiTileComposite_ and applies postProcess (colour space, ICC, precision). After this runs, scratchImage_ is empty and multiTileComposite_ has the final post-processed image. getImage() returns multiTileComposite_.
This lambda is stored in postMulti_ and only runs during a full wait (wait(nullptr)), NOT during the swath-based tileCompletion early-return path.
References grk::CodeStream::cp_, grk::grklog, ioBandCallback_, multiTileComposite_, numTilesDecompressed_, postMultiTile(), postProcess(), scratchImage_, success_, and tilesToDecompress_.
| bool grk::CodeStreamDecompress::postProcess | ( | GrkImage * | img | ) |
Post processes decompressed image.
| img | GrkImage |
References grk::CodeStream::cp_, grk::GrkImage::filterComponents(), postPostProcess_, postProcess(), and grk::GrkImage::postProcess().
Referenced by postMultiTile(), postProcess(), and postSingleTile().
|
private |
References grk::CodeStream::cp_, grk::CodeStream::headerImage_, headerRead_, multiTileComposite_, setDecompressRegion(), tileCache_, tileCompletion_, and tilesToDecompress_.
Referenced by init(), and readHeader().
|
private |
|
private |
Reads a CAP marker.
| headerData | header data |
| headerSize | size of header data |
References grk::CodeStream::cp_, grk_population_count(), grk::grk_read(), grk::grklog, and isHT_.
Referenced by CodeStreamDecompress().
|
private |
Reads a CBD marker (Component bit depth definition).
| headerData | header data |
| headerSize | size of header data |
References GRK_MAX_SUPPORTED_IMAGE_PRECISION, grk::grk_read(), grk::grklog, and grk::CodeStream::headerImage_.
Referenced by CodeStreamDecompress().
|
private |
Reads a CRG marker (Component registration).
| headerData | header data |
| headerSize | size of header data |
References grk::grk_read(), grk::grklog, and grk::CodeStream::headerImage_.
Referenced by CodeStreamDecompress().
|
overridevirtual |
Reads header.
ref grk_header_info
Implements grk::IDecompressor.
References coderPool_, grk::CodeStream::cp_, defaultTcp_, grk::CodeStream::exec(), GRK_CLRSPC_UNKNOWN, headerError_, grk::CodeStream::headerImage_, headerRead_, isHT_, grk::t1::CoderFactory::makeCoder(), multiTileComposite_, TFSingleton::num_threads(), postReadHeader(), grk::CodeStream::procedureList_, readHeaderProcedure(), and tileCache_.
|
private |
Reads header - all markers until first SOT.
References grk::COD, grk::CodeStream::cp_, grk::grklog, grk::t1_t2::InvalidMarkerException::marker_, grk::MARKER_BYTES, grk::MARKER_BYTES_PLUS_MARKER_LENGTH_BYTES, grk::MARKER_LENGTH_BYTES, markerCache_, markerParser_, mergePpm(), grk::QCD, grk::MarkerParser::readShort(), readSOC(), readUNK(), grk::SIZ, grk::SOT, and grk::CodeStream::stream_.
Referenced by readHeader().
|
private |
Reads a PLM marker (Packet length, main header marker).
| headerData | header data |
| headerSize | size of header data |
References grk::CodeStream::cp_.
Referenced by CodeStreamDecompress().
|
private |
Reads a PPM marker (Packed headers, main header).
| headerData | header data |
| headerSize | size of header data |
References grk::CodeStream::cp_.
Referenced by CodeStreamDecompress().
|
private |
Reads a SIZ marker (image and tile size).
| headerData | header data |
| headerSize | size of header data |
References grk::CodeStream::cp_, grk::CodeStream::headerImage_, and grk::SIZMarker::read().
Referenced by CodeStreamDecompress().
|
private |
Reads a SOC marker (Start of Codestream).
References grk::grk_read(), grk::MARKER_BYTES, markerCache_, grk::SOC, and grk::CodeStream::stream_.
Referenced by readHeaderProcedure().
|
private |
Read SOT (Start of tile part) marker.
| headerData | header data |
| headerSize | size of header data |
References grk::CodeStream::cp_, currTileIndex_, currTilePartInfo_, currTileProcessor_, getTileProcessor(), grk::grk_read(), grk::grklog, grk::MARKER_BYTES_PLUS_MARKER_LENGTH_BYTES, grk::sotMarkerSegmentLen, grk::CodeStream::stream_, tileCache_, and tilesToDecompress_.
Referenced by CodeStreamDecompress().
|
private |
Reads a TLM marker (Tile Length Marker).
| headerData | header data |
| headerSize | size of header data |
References grk::CodeStream::cp_, and GRK_RANDOM_ACCESS_TLM.
Referenced by CodeStreamDecompress().
|
private |
Reads unknown marker.
References grk::grklog, grk::MARKER_BYTES, markerCache_, markerParser_, and grk::CodeStream::stream_.
Referenced by readHeaderProcedure().
|
private |
References coderPool_, grk::CodeStream::cp_, decompressTileFutureManager_, genDecompressTileTLMTask(), grk::ITileProcessor::getIndex(), grk::CodeStream::headerImage_, ioBandCallback_, postMultiTile(), postSingleTile(), schedule(), grk::ITileProcessor::scheduleAndRunDecompress(), scratchImage_, and tilePartFetchByTile_.
Referenced by batchDequeueSequential(), decompressImpl(), decompressSequential(), decompressTileImpl(), decompressTLM(), schedule(), scheduleTileBatch(), and sequentialParseAndSchedule().
|
overridevirtual |
Schedule SIMD-accelerated tile-to-swath copies for decoded tiles.
For each tile in the swath range, retrieves the decoded tile image and submits a Taskflow task that converts int32 component data to the caller's output buffer (int8/int16/int32, signed or unsigned).
| swath | Tile range and grid info from grk_decompress_wait |
| buf | Output buffer descriptor (data pointer, layout, precision) |
Reimplemented from grk::IDecompressor.
References grk_swath_buffer::data, TFSingleton::get(), grk::hwy_copy_tile_to_swath(), multiTileComposite_, grk_wait_swath::num_tile_cols, grk_swath_buffer::prec, scheduleSwathCopy(), scratchImage_, swathCopyFutureManager_, grk_wait_swath::tile_x0, grk_wait_swath::tile_y0, and tileCache_.
Referenced by scheduleSwathCopy().
|
private |
References batchDequeueSequential(), batchTileHeadroomIncrement(), batchTileNextRows_, batchTileQueueCondition_, batchTileQueueMutex_, batchTileQueueTLM_, batchTileScheduledRows_, batchTileScheduleHeadroomSequential_, batchTileUnscheduledSequential_, grk::CodeStream::cp_, getTileProcessor(), maxRowsAhead_, schedule(), scheduleTileBatch(), tileCompletion_, and tilesToDecompress_.
Referenced by onRowCompleted(), scheduleTileBatch(), and wait().
|
private |
Parses next slated tile.
References bandDrainCV_, bandOrderMutex_, batchTileQueueCondition_, batchTileQueueMutex_, batchTileQueueSequential_, batchTileScheduleHeadroomSequential_, batchTileUnscheduledSequential_, currTileIndex_, currTilePartInfo_, currTileProcessor_, decompressQueue_, doTileBatching(), grk::EOC, grk::ITileProcessor::getIndex(), grk::grklog, ioBandCallback_, markerParser_, maxRowsAhead_, nextBandTileY_, TFSingleton::num_threads(), grk::ITileProcessor::prepareForDecompression(), schedule(), sequentialParseAndSchedule(), grk::SOT, grk::sotMarkerSegmentLen, grk::CodeStream::stream_, success_, tileCompletion_, tileMarkerParsers_, and tilesToDecompress_.
Referenced by decompressSequential(), decompressTileImpl(), and sequentialParseAndSchedule().
|
overridevirtual |
Sets a band-completion callback for incremental writing.
Must be called after readHeader() but before decompress().
Reimplemented from grk::IDecompressor.
References ioBandCallback_, and ioBandUserData_.
|
protected |
Sets the decompress region.
| region | region in canvas coordinates, relative to image origin |
References grk::ceildiv(), grk::CodeStream::cp_, grk::grklog, grk::CodeStream::headerImage_, multiTileComposite_, region_, setDecompressRegion(), tileCache_, tileCompletion_, tilesToDecompress_, grk::Rect< T >::x0, grk::Rect< T >::x1, grk::Rect< T >::y0, and grk::Rect< T >::y1.
Referenced by postReadHeader(), and setDecompressRegion().
| void grk::CodeStreamDecompress::setNumComponents | ( | uint16_t | numComps | ) |
References defaultTcp_, and setNumComponents().
Referenced by grk::SIZMarker::read(), and setNumComponents().
| void grk::CodeStreamDecompress::setPostPostProcess | ( | std::function< bool(GrkImage *)> | func | ) |
Sets the Post Post Process object.
| func |
References postPostProcess_, and setPostPostProcess().
Referenced by setPostPostProcess().
|
overridevirtual |
Sets the grk_progression_state for a tile.
| state | grk_progression_state |
Implements grk::IDecompressor.
References setProgressionState(), and tileCache_.
Referenced by setProgressionState().
|
private |
References decompressConsumer_, decompressInFlight_, decompressQueue_, decompressThrottleCV_, decompressThrottleMutex_, maxDecompressInFlight_, and startDecompressConsumer().
Referenced by fetchByTile(), and startDecompressConsumer().
|
private |
References batchTileHeadroomIncrement(), batchTileInitialRows_, batchTileScheduledRows_, batchTileScheduleHeadroomSequential_, batchTileUnscheduledSequential_, chunkBuffer_, grk::CodeStream::cp_, decompressSequential(), decompressSequentialPrepare(), decompressWorker_, doTileBatching(), markerCache_, startSequentialDecompress(), and grk::CodeStream::stream_.
Referenced by decompressImpl(), and startSequentialDecompress().
|
private |
References grk::CodeStream::cp_, decompressTLM(), decompressWorker_, fetchByTile(), grk::TPFetchSeq::genCollections(), postMultiTile(), scratchImage_, startTLMDecompress(), tilePartFetchByTile_, and tilePartFetchFlat_.
Referenced by decompressImpl(), and startTLMDecompress().
|
overridevirtual |
Wait for tile decompression to complete.
Two calling modes:
Swath-based (swath != nullptr, tileCompletion_ active): Returns as soon as the requested swath tiles are decompressed. Tile data is available via entry->processor->getImage() for multi-tile images (has_multiple_tiles=true), or in scratchImage_ for single-tile images. NOTE: postMulti_() does NOT run in this path, so scratchImage_ data is raw (no postProcess). Callers needing post-processed data for single-tile images must subsequently call wait(nullptr) or use getImage() which triggers a full wait.
Full wait (swath == nullptr, or no tileCompletion_): Joins all worker threads, waits for all tile futures, and runs postMulti_() which transfers scratchImage_ data to multiTileComposite_ with post-processing applied.
Implements grk::IDecompressor.
References batchTileScheduledRows_, decompressConsumer_, decompressQueue_, decompressTileFutureManager_, decompressWorker_, doTileBatching(), fetchByTileFutures_, grk::grklog, postMulti_, scheduleTileBatch(), success_, tileCompletion_, and wait().
Referenced by decompressTile(), getImage(), getImage(), wait(), and wait().
|
private |
|
overridevirtual |
Wait for all in-flight swath copy tasks to complete.
Reimplemented from grk::IDecompressor.
References swathCopyFutureManager_, and waitSwathCopy().
Referenced by waitSwathCopy().
|
private |
Referenced by decompressTileImpl(), and postSingleTile().
|
private |
Referenced by decompressTLM(), and sequentialParseAndSchedule().
|
private |
Referenced by decompressTLM(), and sequentialParseAndSchedule().
|
private |
Referenced by decompressTLM(), and startSequentialDecompress().
|
private |
Referenced by scheduleTileBatch().
|
private |
Referenced by decompressTLM(), scheduleTileBatch(), and sequentialParseAndSchedule().
|
private |
Referenced by decompressTLM(), scheduleTileBatch(), and sequentialParseAndSchedule().
|
private |
Referenced by batchDequeueSequential(), and sequentialParseAndSchedule().
|
private |
Referenced by decompressTLM(), and scheduleTileBatch().
|
private |
Referenced by decompressTLM(), scheduleTileBatch(), startSequentialDecompress(), and wait().
|
private |
Referenced by batchDequeueSequential(), scheduleTileBatch(), sequentialParseAndSchedule(), and startSequentialDecompress().
|
private |
Referenced by batchDequeueSequential(), scheduleTileBatch(), sequentialParseAndSchedule(), and startSequentialDecompress().
|
private |
Referenced by decompressSequential(), and startSequentialDecompress().
|
private |
pool of ICoder
Referenced by decompress(), decompressTileImpl(), genDecompressTileTLMTask(), readHeader(), and schedule().
|
private |
Referenced by decompressImpl(), and init().
|
private |
Referenced by decompress(), readSOT(), and sequentialParseAndSchedule().
|
private |
Referenced by decompress(), readSOT(), and sequentialParseAndSchedule().
|
private |
Tile processor currently being parsed.
Referenced by decompress(), readSOT(), and sequentialParseAndSchedule().
|
private |
Referenced by startDecompressConsumer(), wait(), wait(), and ~CodeStreamDecompress().
|
private |
Referenced by fetchByTile(), postMultiTile(), and startDecompressConsumer().
|
private |
Referenced by fetchByTile(), sequentialParseAndSchedule(), startDecompressConsumer(), wait(), wait(), and ~CodeStreamDecompress().
|
private |
Referenced by decompressImpl().
|
private |
Referenced by postMultiTile(), and startDecompressConsumer().
|
private |
Referenced by fetchByTile(), postMultiTile(), and startDecompressConsumer().
|
private |
futures for scheduled tiles
Referenced by decompress(), decompressTileImpl(), genDecompressTileTLMTask(), schedule(), wait(), and wait().
|
private |
Referenced by startSequentialDecompress(), startTLMDecompress(), wait(), and ~CodeStreamDecompress().
|
private |
Default TileCodingParams.
Store decoding parameters common to all tiles (information like COD, COC and RGN in main header)
Referenced by activateScratch(), CodeStreamDecompress(), dumpMainHeader(), getTileProcessor(), initDefaultTCP(), readHeader(), and setNumComponents().
|
private |
Referenced by fetchByTile(), wait(), and wait().
|
private |
callback to reclaim io buffers
Referenced by init().
|
private |
true if there was an error reading the main header
Referenced by needsHeaderRead(), and readHeader().
|
private |
true if main header was successfully read
Referenced by needsHeaderRead(), postReadHeader(), and readHeader().
|
private |
callback invoked when a tile-row band is ready for incremental writing
Referenced by activateScratch(), decompress(), decompressTLM(), getBandCallback(), init(), postMultiTile(), postMultiTile(), schedule(), sequentialParseAndSchedule(), and setBandCallback().
|
private |
Referenced by getBandUserData(), init(), and setBandCallback().
|
private |
callback for io pixels
Referenced by init().
|
private |
io user data
Referenced by init().
|
private |
global HT flag
Referenced by readCAP(), and readHeader().
|
private |
|
private |
|
private |
Referenced by fetchByTile(), postMultiTile(), and startDecompressConsumer().
|
private |
Referenced by fetchByTile().
|
staticconstexprprivate |
Referenced by fetchByTile(), onRowCompleted(), scheduleTileBatch(), and sequentialParseAndSchedule().
|
private |
multi tile composite GrkImage Used to composite multiple tiles - subsampled and reduced for region decompression
Referenced by activateScratch(), CodeStreamDecompress(), decompress(), decompressTile(), getCompositeNoWait(), getImage(), postMultiTile(), postReadHeader(), readHeader(), scheduleSwathCopy(), and setDecompressRegion().
|
private |
Referenced by decompress(), decompressTLM(), and sequentialParseAndSchedule().
|
private |
number of decompressed tiles
Referenced by decompressImpl(), postMultiTile(), and postMultiTile().
|
private |
Referenced by decompress().
|
private |
Referenced by wait().
|
private |
post post-decompress method
Referenced by postProcess(), and setPostPostProcess().
|
private |
Holds unreduced unsubsampled decompress region , if set.
Referenced by activateScratch(), getTileProcessor(), and setDecompressRegion().
|
private |
Scratch GrkImage for decompressor This image may composite multiple tiles, if needed.
Referenced by decompressImpl(), decompressTileImpl(), postMultiTile(), postMultiTile(), postSingleTile(), schedule(), scheduleSwathCopy(), and startTLMDecompress().
|
private |
track success of scheduled tile decompression
Referenced by batchDequeueSequential(), decompress(), decompressImpl(), decompressSequential(), decompressTLM(), postMultiTile(), postMultiTile(), sequentialParseAndSchedule(), and wait().
|
private |
futures for swath copy tasks scheduled via scheduleSwathCopy()
Referenced by scheduleSwathCopy(), and waitSwathCopy().
|
private |
Referenced by CodeStreamDecompress(), decompress(), decompressImpl(), decompressSequential(), decompressSequentialPrepare(), decompressTile(), decompressTileImpl(), dump(), getImage(), getProgressionState(), getTileProcessor(), init(), postReadHeader(), postSingleTile(), readHeader(), readSOT(), scheduleSwathCopy(), setDecompressRegion(), and setProgressionState().
|
private |
|
private |
Referenced by CodeStreamDecompress(), and sequentialParseAndSchedule().
|
private |
Referenced by schedule(), and startTLMDecompress().
|
private |
Referenced by decompressTileImpl(), and startTLMDecompress().
|
private |