|
Grok 20.3.2
|
Decompression code block implementation. More...
#include <CodeblockDecompressImpl.h>
Public Member Functions | |
| CodeblockDecompressImpl (uint16_t numLayers) | |
| Constructs a CodeblockDecompressImpl. | |
| ~CodeblockDecompressImpl () | |
| Destroys a CodeblockDecompressImpl. | |
| void | init () |
| Initializes the code block. | |
| std::vector< Segment * >::iterator | toBeDecompressedBegin () |
| Iterator pointing to the beginning of the segments yet to be decompressed. | |
| std::vector< Segment * >::iterator | toBeDecompressedEnd () |
| Iterator pointing one location past the last Segment whose data has been parsed. | |
| void | setNumBps (uint8_t bps) |
| Sets number of bit planes to be decompressed. | |
| Segment * | getSegment (uint16_t index) |
| Gets segment for the specified index If index equals number of segments, then a new segment will be added. | |
| void | readPacketHeader (std::shared_ptr< t1_t2::BitIO > bio, uint32_t &signalledLayerDataBytes, uint16_t layno, uint8_t cblk_sty) |
| Reads packet header. | |
| void | parsePacketData (uint16_t layno, size_t &remainingTilePartBytes, bool isHT, uint8_t *layerData, uint32_t &layerDataOffset) |
| Parses packet data based on packet header. | |
| void | nextToBeDecompressedSegment (std::vector< Segment * >::iterator &s) |
| Increments iterator for next segment to be decompressed. | |
| void | prepareBufferList (std::vector< Segment * >::iterator seg) |
| bool | canDecompress (void) |
| template<typename T> | |
| bool | decompress (T *coder, uint8_t orientation, uint32_t cblksty) |
| Decompresses all layers specified so far. | |
| uint16_t | getNumDataParsedSegments (void) |
| Gets number of segments whose layer data has been parsed. | |
| std::vector< Segment * >::iterator | currDataParsedSegment (void) |
| Gets iterator pointing to current segment whose layer data is being parsed. | |
| std::vector< Segment * >::iterator | nextDataParsedSegment (void) |
| Increments to next segment whose data is going to be parsed. | |
| std::vector< Segment * >::iterator | currHeaderParsedSegment (void) |
| Gets iterator pointing to current segment being populated by packet header. | |
| bool | dataChunksEmpty () |
| Checks whether all segments' data chunks are empty. | |
| size_t | getDataChunksLength () const |
| Gets combined length of all data chunks across all uncompressed segments whose datg has been parsed. | |
| bool | copyDataChunksToContiguous (uint8_t *buffer) const |
| Copies all segment data chunk buffers for all uncompressed segments whose data has been parsed, into a single contiguous buffer. | |
| Public Member Functions inherited from grk::t1::CodeblockImpl | |
| CodeblockImpl (uint16_t numLayers) | |
| ~CodeblockImpl () | |
| uint8_t | getNumPassesInLayer (uint16_t layno) |
| void | setNumPassesInLayer (uint16_t layno, uint8_t passes) |
| void | incNumPassesInLayer (uint16_t layno, uint8_t delta) |
| Buffer8 * | getCompressedStream (void) |
| uint8_t | numbps (void) |
| void | setNumBps (uint8_t bps) |
| uint8_t | numlenbits () |
| void | setNumLenBits (uint8_t bits) |
Private Member Functions | |
| void | release () |
| Releases resources. | |
| void | newSegment (uint8_t cblk_sty) |
| Creates a new Segment. | |
Private Attributes | |
| uint8_t | numDataParsedSegments_ |
| Number of segments whose data has been read from their respective layers. | |
| uint8_t | numDecompressedSegments_ |
| Number of decompressed segments. | |
| std::vector< Segment * > | segs_ |
| Collection of Segment. | |
| uint8_t ** | buffers_ |
| Array of pointers to buffers. | |
| uint32_t * | buffer_lengths_ |
| Array of buffer lengths. | |
| uint16_t | num_buffers_ |
| Number of buffers. | |
| uint8_t | bitPlanesToDecompress_ |
| Remaining bit planes to decompress. | |
| uint8_t | passtype_ |
| Type of pass: cleanup, magnitude refinement or significance propagation. | |
| uint32_t | compressDataOffset_ |
| offset into contiguous buffer of compressed data | |
| uint8_t | passno_ |
| decompression: current pass number | |
| bool | needsSegInit_ |
| decompression: segment needs initialization | |
| bool | needsSegUpdate_ |
| decompression: segment needs update, as more packets have been parsed | |
| uint16_t | dataParsedLayers_ |
| number of layers whose data has been parsed | |
Additional Inherited Members | |
| Protected Member Functions inherited from grk::t1::CodeblockImpl | |
| void | init () |
| Protected Attributes inherited from grk::t1::CodeblockImpl | |
| Buffer8 | compressedStream |
| uint8_t | numbps_ |
| uint8_t | numlenbits_ |
| uint8_t * | signalledPassesByLayer_ |
| uint16_t | numLayers_ |
Decompression code block implementation.
|
inline |
Constructs a CodeblockDecompressImpl.
| numLayers | total number of layers for code block |
References bitPlanesToDecompress_, buffer_lengths_, buffers_, grk::t1::CodeblockImpl::CodeblockImpl(), compressDataOffset_, dataParsedLayers_, needsSegInit_, needsSegUpdate_, num_buffers_, numDataParsedSegments_, numDecompressedSegments_, passno_, and passtype_.
|
inline |
Destroys a CodeblockDecompressImpl.
References buffer_lengths_, buffers_, and release().
|
inline |
References bitPlanesToDecompress_, dataChunksEmpty(), numDataParsedSegments_, and numDecompressedSegments_.
Referenced by grk::t1::CodeblockDecompress::canDecompress(), and decompress().
|
inline |
Copies all segment data chunk buffers for all uncompressed segments whose data has been parsed, into a single contiguous buffer.
| buffer | contiguous buffer |
References segs_.
Referenced by grk::t1::CodeblockDecompress::copyDataChunksToContiguous().
|
inline |
Gets iterator pointing to current segment whose layer data is being parsed.
References numDataParsedSegments_, and segs_.
Referenced by nextDataParsedSegment(), and parsePacketData().
|
inline |
Gets iterator pointing to current segment being populated by packet header.
References segs_.
Referenced by readPacketHeader().
|
inline |
Checks whether all segments' data chunks are empty.
References segs_.
Referenced by canDecompress(), and grk::t1::CodeblockDecompress::dataChunksEmpty().
|
inline |
Decompresses all layers specified so far.
| T | type of coder |
| coder | pointer to block decoder |
| compressed_data,pointer | to compressed data |
| orientation | code block band's orientation |
| cblksty | code block style |
References bitPlanesToDecompress_, buffer_lengths_, buffers_, canDecompress(), dataParsedLayers_, GRK_CBLKSTY_LAZY, grk::grklog, grk::maxBitPlanesJ2K, needsSegInit_, needsSegUpdate_, nextToBeDecompressedSegment(), num_buffers_, grk::t1::CodeblockImpl::numbps_, numDataParsedSegments_, grk::t1::CodeblockImpl::numLayers_, passno_, passtype_, prepareBufferList(), segs_, T1_TYPE_MQ, T1_TYPE_RAW, toBeDecompressedBegin(), and toBeDecompressedEnd().
Referenced by grk::t1::CodeblockDecompress::decompress().
|
inline |
Gets combined length of all data chunks across all uncompressed segments whose datg has been parsed.
References segs_.
Referenced by grk::t1::CodeblockDecompress::getDataChunksLength().
|
inline |
Gets number of segments whose layer data has been parsed.
References numDataParsedSegments_.
Referenced by grk::t1::CodeblockDecompress::getNumDataParsedSegments().
|
inline |
Gets segment for the specified index If index equals number of segments, then a new segment will be added.
| pointer | to Segment |
References grk::t1::CodeblockImpl::numLayers_, and segs_.
Referenced by grk::t1::CodeblockDecompress::getSegment().
|
inline |
Initializes the code block.
References grk::t1::CodeblockImpl::init().
Referenced by grk::t1::CodeblockDecompress::init().
|
inlineprivate |
Creates a new Segment.
| cblk_sty | code block stule |
References GRK_CBLKSTY_LAZY, GRK_CBLKSTY_TERMALL, grk::maxPassesPerSegmentJ2K, grk::t1::CodeblockImpl::numLayers_, and segs_.
Referenced by readPacketHeader().
|
inline |
Increments to next segment whose data is going to be parsed.
References currDataParsedSegment(), and numDataParsedSegments_.
Referenced by parsePacketData().
|
inline |
Increments iterator for next segment to be decompressed.
| segIter | reference to std::vector<Segment>::iterator |
References compressDataOffset_, needsSegInit_, numDecompressedSegments_, and passno_.
Referenced by decompress().
|
inline |
Parses packet data based on packet header.
No data is actually ready, rather the information read from packet header is used to take segment offsets and lengths store them in data chunk array for that segment.
As segments can span layers, there may be multiple chunks for different layers.
As layers can span segments, there may be multiple segments for a given layer
| layno | layer number for this packet |
| remainingTilePartBytes | remaining tile part bytes (passed by reference) |
| isHT | true if this is a HTJ2K code block |
| layerData | pointer to packet's layer data (this is always contiguous) |
| layerDataOffset | reference to layer data offset |
References currDataParsedSegment(), dataParsedLayers_, grk::grklog, nextDataParsedSegment(), release(), segs_, and grk::t1::CodeblockImpl::signalledPassesByLayer_.
Referenced by grk::t1::CodeblockDecompress::parsePacketData().
|
inline |
References buffer_lengths_, buffers_, and num_buffers_.
Referenced by decompress().
|
inline |
Reads packet header.
| bio | shared pointer for BitIO |
| signalledDataBytes | reference to variable holding number of signalled data bytes |
| layno | layer number |
| cblk_sty | code block style |
References currHeaderParsedSegment(), grk::floorlog2(), grk::grklog, grk::maxPassesPerSegmentJ2K, newSegment(), grk::t1::CodeblockImpl::numlenbits(), segs_, grk::t1::CodeblockImpl::setNumLenBits(), and grk::t1::CodeblockImpl::signalledPassesByLayer_.
Referenced by grk::t1::CodeblockDecompress::readPacketHeader().
|
inlineprivate |
Releases resources.
References numDataParsedSegments_, numDecompressedSegments_, and segs_.
Referenced by parsePacketData(), and ~CodeblockDecompressImpl().
|
inline |
Sets number of bit planes to be decompressed.
| bps | number of bit planes |
References bitPlanesToDecompress_, and grk::t1::CodeblockImpl::numbps_.
Referenced by grk::t1::CodeblockDecompress::setNumBps().
|
inline |
Iterator pointing to the beginning of the segments yet to be decompressed.
References numDecompressedSegments_, and segs_.
Referenced by decompress().
|
inline |
Iterator pointing one location past the last Segment whose data has been parsed.
References numDataParsedSegments_, and segs_.
Referenced by decompress().
|
private |
Remaining bit planes to decompress.
Referenced by canDecompress(), CodeblockDecompressImpl(), decompress(), and setNumBps().
|
private |
Array of buffer lengths.
Referenced by CodeblockDecompressImpl(), decompress(), prepareBufferList(), and ~CodeblockDecompressImpl().
|
private |
Array of pointers to buffers.
Referenced by CodeblockDecompressImpl(), decompress(), prepareBufferList(), and ~CodeblockDecompressImpl().
|
private |
offset into contiguous buffer of compressed data
Referenced by CodeblockDecompressImpl(), and nextToBeDecompressedSegment().
|
private |
number of layers whose data has been parsed
Referenced by CodeblockDecompressImpl(), decompress(), and parsePacketData().
|
private |
decompression: segment needs initialization
Referenced by CodeblockDecompressImpl(), decompress(), and nextToBeDecompressedSegment().
|
private |
decompression: segment needs update, as more packets have been parsed
Referenced by CodeblockDecompressImpl(), and decompress().
|
private |
Number of buffers.
Referenced by CodeblockDecompressImpl(), decompress(), and prepareBufferList().
|
private |
Number of segments whose data has been read from their respective layers.
Layers whose data has been read always form a contiguous set - there are never any layers whose data is skipped in the middle
Referenced by canDecompress(), CodeblockDecompressImpl(), currDataParsedSegment(), decompress(), getNumDataParsedSegments(), nextDataParsedSegment(), release(), and toBeDecompressedEnd().
|
private |
Number of decompressed segments.
Referenced by canDecompress(), CodeblockDecompressImpl(), nextToBeDecompressedSegment(), release(), and toBeDecompressedBegin().
|
private |
decompression: current pass number
Referenced by CodeblockDecompressImpl(), decompress(), and nextToBeDecompressedSegment().
|
private |
Type of pass: cleanup, magnitude refinement or significance propagation.
Referenced by CodeblockDecompressImpl(), and decompress().
|
private |
Collection of Segment.
Referenced by copyDataChunksToContiguous(), currDataParsedSegment(), currHeaderParsedSegment(), dataChunksEmpty(), decompress(), getDataChunksLength(), getSegment(), newSegment(), parsePacketData(), readPacketHeader(), release(), toBeDecompressedBegin(), and toBeDecompressedEnd().