Grok 20.3.2
grk::TLMMarker Struct Reference

Reads/writes TLM markers. More...

#include <TLMMarker.h>

Public Member Functions

 TLMMarker (uint16_t numSignalledTiles)
 Constructs a TLMMarker.
 TLMMarker (const std::string &filePath, uint16_t numSignalledTiles, uint64_t tileStreamStart)
 Constructs a TLMMarker.
 TLMMarker (IStream *stream)
 Constructs a TLMMarker.
 ~TLMMarker ()=default
 Destroys a TLMMarker.
bool read (std::span< uint8_t > headerData, uint16_t headerSize)
 Reads a TLM marker.
void rewind () noexcept
 Rewinds state so that tile part lengths can be read.
uint8_t getNumTileParts (uint16_t tileIndex) const noexcept
 Gets the number of tile parts for a given tile index.
TilePartLength< uint32_t > * next (bool peek)
 Gets next TilePartLength.
void invalidate () noexcept
 Marks the object as invalid, in case of corrupt TLM marker.
bool valid () const noexcept
 Checks if the object is valid.
void seekNextSlated (TileWindow *tilesToDecompress, TileCache *tileCache, IStream *stream)
 Seeks to next scheduled tile part.
bool writeBegin (uint32_t numTilePartsTotal)
 Prepares to write TLM marker to code stream.
void add (TilePartLength< uint32_t > info)
 Adds a new tile part(decompression).
void add (uint16_t tile_index, uint32_t tile_part_size) noexcept
 Adds a new tile part (compression).
bool writeEnd ()
 Finishes writing TLM marker.
void readComplete (uint64_t tileStreamStart) noexcept
 Completes calculations such as absolute tile part start position for all tile parts in tilePartsPerTile_.
const TPSEQ_VECgetTileParts (void) const

Private Attributes

std::unique_ptr< TLMMarkerManagermarkerManager_
TPSEQ_VEC tilePartsPerTile_
 stores tile part info sequence for each tile Useful if SOT markers don't store number of tile parts per tile
IStreamstream_ = nullptr
 IStream
uint64_t streamStart = 0
 cached start of stream before writing TLM markers
bool valid_ = true
 true if TLM markers are valid
bool hasTileIndices_ = false
 true if TLM markers store tile indices.
uint16_t tileCount_ = 0
 used to track tile index when there are no tile indices stored in markers
uint16_t numSignalledTiles_ = 0
 number of tiles signalled in main header
uint64_t tilePartStart_ = 0
 calculated start position for current tile part parsed from markers
std::string filePath_

Detailed Description

Reads/writes TLM markers.

Constructor & Destructor Documentation

◆ TLMMarker() [1/3]

grk::TLMMarker::TLMMarker ( uint16_t numSignalledTiles)
explicit

Constructs a TLMMarker.

Parameters
numSignalledTilesnumber of tiles signalled in main header

References markerManager_, numSignalledTiles_, and tilePartsPerTile_.

Referenced by TLMMarker(), and TLMMarker().

◆ TLMMarker() [2/3]

grk::TLMMarker::TLMMarker ( const std::string & filePath,
uint16_t numSignalledTiles,
uint64_t tileStreamStart )

Constructs a TLMMarker.

Parameters
numSignalledTilesnumber of tiles signalled in main header

References add(), filePath_, grk::TLMFile< T >::load(), readComplete(), TLMMarker(), and valid_.

◆ TLMMarker() [3/3]

grk::TLMMarker::TLMMarker ( IStream * stream)
explicit

Constructs a TLMMarker.

Parameters
streamIStream for code stream

References stream_, and TLMMarker().

◆ ~TLMMarker()

grk::TLMMarker::~TLMMarker ( )
default

Member Function Documentation

◆ add() [1/2]

void grk::TLMMarker::add ( TilePartLength< uint32_t > info)

Adds a new tile part(decompression).

Parameters
info

References grk::TilePartLength< T >::length_, markerManager_, grk::TilePartLength< T >::tileIndex_, tilePartsPerTile_, and tilePartStart_.

Referenced by read(), TLMMarker(), and ~TLMMarker().

◆ add() [2/2]

void grk::TLMMarker::add ( uint16_t tile_index,
uint32_t tile_part_size )
noexcept

Adds a new tile part (compression).

Marker index is always 0 todo: fix

Parameters
tile_indextile index
tile_part_sizesize of tile part

References markerManager_.

◆ getNumTileParts()

uint8_t grk::TLMMarker::getNumTileParts ( uint16_t tileIndex) const
noexcept

Gets the number of tile parts for a given tile index.

Parameters
tileIndexIndex of the tile
Returns
Number of tile parts, or 0 if invalid

References tilePartsPerTile_, and valid_.

Referenced by ~TLMMarker().

◆ getTileParts()

const TPSEQ_VEC & grk::TLMMarker::getTileParts ( void ) const

References tilePartsPerTile_.

Referenced by ~TLMMarker().

◆ invalidate()

void grk::TLMMarker::invalidate ( )
noexcept

Marks the object as invalid, in case of corrupt TLM marker.

References valid_.

Referenced by ~TLMMarker().

◆ next()

TilePartLength< uint32_t > * grk::TLMMarker::next ( bool peek)

Gets next TilePartLength.

Query next TLM entry.

Parameters
peek- if true then do not advance to next TilePartLength
Returns
TilePartLength
Parameters
peekif false, then move to next TLM entry. Otherwise, stay at current TLM entry

References grk::grklog, markerManager_, numSignalledTiles_, and valid_.

Referenced by seekNextSlated(), and ~TLMMarker().

◆ read()

bool grk::TLMMarker::read ( std::span< uint8_t > headerData,
uint16_t headerSize )

Reads a TLM marker.

Reads and processes TLM marker from code stream.

Parameters
headerDataheader data
headerSizesize of header
Returns
true if success
Parameters
headerDataSpan of header data to read from
headerSizeSize of the header data
Returns
true if successful, false on fatal error

References add(), grk::grk_read(), grk::grklog, hasTileIndices_, markerManager_, numSignalledTiles_, tileCount_, grk::tlm_marker_start_bytes, and valid_.

◆ readComplete()

void grk::TLMMarker::readComplete ( uint64_t tileStreamStart)
noexcept

Completes calculations such as absolute tile part start position for all tile parts in tilePartsPerTile_.

Parameters
tileStreamStarttile stream start

References tilePartsPerTile_.

Referenced by TLMMarker(), and ~TLMMarker().

◆ rewind()

void grk::TLMMarker::rewind ( )
noexcept

Rewinds state so that tile part lengths can be read.

References grk::grklog, markerManager_, tilePartsPerTile_, and valid_.

◆ seekNextSlated()

void grk::TLMMarker::seekNextSlated ( TileWindow * tilesToDecompress,
TileCache * tileCache,
IStream * stream )

Seeks to next scheduled tile part.

Seek to next slated tile part.

Parameters
tilesToDecompresstile window
streamIStream

References grk::TileCache::get(), grk::grklog, grk::TileWindow::isSlated(), next(), grk::IStream::seek(), and grk::IStream::tell().

Referenced by ~TLMMarker().

◆ valid()

bool grk::TLMMarker::valid ( ) const
nodiscardnoexcept

Checks if the object is valid.

Returns
true if valid

References valid_.

Referenced by ~TLMMarker().

◆ writeBegin()

bool grk::TLMMarker::writeBegin ( uint32_t numTilePartsTotal)

Prepares to write TLM marker to code stream.

Parameters
numTilePartsTotaltotal number of tile parts in image
Returns
true if successful

References grk::grklog, grk::MARKER_BYTES, stream_, streamStart, grk::TLM, grk::tlm_marker_start_bytes, and grk::tlmMarkerBytesPerTilePart.

Referenced by ~TLMMarker().

◆ writeEnd()

bool grk::TLMMarker::writeEnd ( )

Finishes writing TLM marker.

Finalizes writing of TLM marker by updating tile part lengths.

Returns
true if successful
true if successful, false on fatal error

References grk::grklog, markerManager_, stream_, streamStart, and grk::tlm_marker_start_bytes.

Referenced by ~TLMMarker().

Member Data Documentation

◆ filePath_

std::string grk::TLMMarker::filePath_
private

Referenced by TLMMarker().

◆ hasTileIndices_

bool grk::TLMMarker::hasTileIndices_ = false
private

true if TLM markers store tile indices.

If not, then there must be only one tile part per tile, and the tile parts must be stored in the stream in order of tile index

Referenced by read().

◆ markerManager_

std::unique_ptr<TLMMarkerManager> grk::TLMMarker::markerManager_
private

◆ numSignalledTiles_

uint16_t grk::TLMMarker::numSignalledTiles_ = 0
private

number of tiles signalled in main header

Referenced by next(), read(), and TLMMarker().

◆ stream_

IStream* grk::TLMMarker::stream_ = nullptr
private

◆ streamStart

uint64_t grk::TLMMarker::streamStart = 0
private

cached start of stream before writing TLM markers

Referenced by writeBegin(), and writeEnd().

◆ tileCount_

uint16_t grk::TLMMarker::tileCount_ = 0
private

used to track tile index when there are no tile indices stored in markers

Referenced by read().

◆ tilePartsPerTile_

TPSEQ_VEC grk::TLMMarker::tilePartsPerTile_
private

stores tile part info sequence for each tile Useful if SOT markers don't store number of tile parts per tile

Referenced by add(), getNumTileParts(), getTileParts(), readComplete(), rewind(), and TLMMarker().

◆ tilePartStart_

uint64_t grk::TLMMarker::tilePartStart_ = 0
private

calculated start position for current tile part parsed from markers

Referenced by add().

◆ valid_

bool grk::TLMMarker::valid_ = true
private

true if TLM markers are valid

Referenced by getNumTileParts(), invalidate(), next(), read(), rewind(), TLMMarker(), and valid().


The documentation for this struct was generated from the following files: