TSDuck v3.40-3968
MPEG Transport Stream Toolkit
Loading...
Searching...
No Matches
ts::TSPacketMetadata Class Referencefinal

Metadata of an MPEG-2 transport packet for tsp plugins. More...

#include <tsTSPacketMetadata.h>

Public Member Functions

 TSPacketMetadata ()
 Constructor.
 
uint8_t * auxData ()
 Direct access to the auxiliary data.
 
const uint8_t * auxData () const
 Direct access to the auxiliary data.
 
size_t auxDataSize () const
 Size in bytes of the auxiliary data.
 
void clearAllLabels ()
 Clear all labels for the TS packet.
 
void clearInputTimeStamp ()
 Clear the input time stamp.
 
void clearLabel (size_t label)
 Clear a specific label for the TS packet.
 
void clearLabels (const TSPacketLabelSet &mask)
 Clear a specific set of labels for the TS packet.
 
bool deserialize (const ByteBlock &bin)
 Deserialize the content of this instance from a byteblock.
 
bool deserialize (const void *data, size_t size)
 Deserialize the content of this instance from a byteblock.
 
size_t getAuxData (void *data, size_t max_size) const
 Copy bytes from the auxiliary data.
 
void getAuxData (void *data, size_t max_size, uint8_t pad) const
 Copy bytes from the auxiliary data and pad user buffer if necessary.
 
bool getBitrateChanged () const
 Check if the plugin has changed the transport stream bitrate.
 
bool getFlush () const
 Check if the packet chain shall be flushed by tsp as soon as possible.
 
bool getInputStuffing () const
 Check if the packet was artificially inserted as input stuffing.
 
TimeSource getInputTimeSource () const
 Get the identification of the source of the input time stamp.
 
PCR getInputTimeStamp () const
 Get the optional input time stamp of the packet.
 
bool getNullified () const
 Check if the packet was explicitly turned into a null packet by a plugin.
 
bool hasAllLabels (const TSPacketLabelSet &mask) const
 Check if the TS packet has all labels set from a set of labels.
 
bool hasAnyLabel () const
 Check if the TS packet has any label set.
 
bool hasAnyLabel (const TSPacketLabelSet &mask) const
 Check if the TS packet has any label set from a set of labels.
 
bool hasInputTimeStamp () const
 Check if the packet has an input time stamp.
 
bool hasLabel (size_t label) const
 Check if the TS packet has a specific label set.
 
UString inputTimeStampString (const UString &none=u"none") const
 Get the input time stamp as a string, typically for debug messages.
 
TSPacketLabelSet labels () const
 Get all labels from the TS packet.
 
UString labelsString (const UString &separator=u" ", const UString &none=u"none") const
 Get the list of labels as a string, typically for debug messages.
 
void reset ()
 Reset the content of this instance.
 
void serialize (ByteBlock &bin) const
 Serialize the content of this instance into a byteblock.
 
size_t serialize (void *data, size_t size) const
 Serialize the content of this instance into a memory area.
 
void setAuxData (const void *data, size_t size)
 Copy bytes into the auxiliary data.
 
void setBitrateChanged (bool on)
 Specify if the plugin has changed the transport stream bitrate.
 
void setFlush (bool on)
 Specify if the packet chain shall be flushed by tsp as soon as possible.
 
void setInputStuffing (bool on)
 Specify if the packet was artificially inserted as input stuffing.
 
template<class Rep , class Period >
void setInputTimeStamp (const cn::duration< Rep, Period > &time_stamp, TimeSource source)
 Set the optional input time stamp of the packet.
 
void setLabel (size_t label)
 Set a specific label for the TS packet.
 
void setLabels (const TSPacketLabelSet &mask)
 Set a specific set of labels for the TS packet.
 
void setNullified (bool on)
 Specify if the packet was explicitly turned into a null packet by a plugin.
 

Static Public Member Functions

static void Copy (TSPacketMetadata *dest, const TSPacketMetadata *source, size_t count)
 Copy contiguous TS packet metadata.
 
static void DisplayLayout (std::ostream &out, const char *prefix="")
 Display the structure layout of the data structure (for debug only).
 
static void Reset (TSPacketMetadata *dest, size_t count)
 Reset contiguous TS packet metadata.
 

Static Public Attributes

static constexpr size_t AUX_DATA_MAX_SIZE = 16
 Maximum size in bytes of auxiliary data.
 
static constexpr uint8_t SERIALIZATION_MAGIC = SYNC_BYTE ^ 0xFF
 First "magic" byte of the structure into which a TSPacketMetadata was serialized.
 
static constexpr size_t SERIALIZATION_SIZE = 14
 Size in bytes of the structure into which a TSPacketMetadata can be serialized.
 

Detailed Description

Metadata of an MPEG-2 transport packet for tsp plugins.

An instance of this class is passed with each TS packet to packet processor plugins.

Member Function Documentation

◆ reset()

void ts::TSPacketMetadata::reset ( )

Reset the content of this instance.

Return to initial empty state.

◆ setInputStuffing()

void ts::TSPacketMetadata::setInputStuffing ( bool  on)
inline

Specify if the packet was artificially inserted as input stuffing.

Parameters
[in]onWhen true, the packet was artificially inserted as input stuffing.

◆ getInputStuffing()

bool ts::TSPacketMetadata::getInputStuffing ( ) const
inline

Check if the packet was artificially inserted as input stuffing.

Returns
True when the packet was artificially inserted as input stuffing.

◆ setNullified()

void ts::TSPacketMetadata::setNullified ( bool  on)
inline

Specify if the packet was explicitly turned into a null packet by a plugin.

Parameters
[in]onWhen true, the packet was explicitly turned into a null packet by a plugin.

◆ getNullified()

bool ts::TSPacketMetadata::getNullified ( ) const
inline

Check if the packet was explicitly turned into a null packet by a plugin.

Returns
True when the packet was explicitly turned into a null packet by a plugin.

◆ setFlush()

void ts::TSPacketMetadata::setFlush ( bool  on)
inline

Specify if the packet chain shall be flushed by tsp as soon as possible.

This is typically called by a packet processing plugin.

Parameters
[in]onWhen set to true by a packet processing plugin, the packet and all previously processed and buffered packets should be passed to the next processor as soon as possible.

◆ getFlush()

bool ts::TSPacketMetadata::getFlush ( ) const
inline

Check if the packet chain shall be flushed by tsp as soon as possible.

Returns
True when the packet and all previously processed and buffered packets should be passed to the next processor as soon as possible

◆ setBitrateChanged()

void ts::TSPacketMetadata::setBitrateChanged ( bool  on)
inline

Specify if the plugin has changed the transport stream bitrate.

This is typically called by a packet processing plugin.

Parameters
[in]onWhen set to true by a packet processing plugin, tsp should call its getBitrate() callback as soon as possible.

◆ getBitrateChanged()

bool ts::TSPacketMetadata::getBitrateChanged ( ) const
inline

Check if the plugin has changed the transport stream bitrate.

Returns
True when tsp should call the getBitrate() callback of the plugin as soon as possible.

◆ hasLabel()

bool ts::TSPacketMetadata::hasLabel ( size_t  label) const
inline

Check if the TS packet has a specific label set.

Parameters
[in]labelThe label to check.
Returns
True if the TS packet has label set.

◆ hasAnyLabel() [1/2]

bool ts::TSPacketMetadata::hasAnyLabel ( ) const
inline

Check if the TS packet has any label set.

Returns
True if the TS packet has any label.

◆ hasAnyLabel() [2/2]

bool ts::TSPacketMetadata::hasAnyLabel ( const TSPacketLabelSet mask) const
inline

Check if the TS packet has any label set from a set of labels.

Parameters
[in]maskThe mask of labels to check.
Returns
True if the TS packet has any label from mask.

◆ hasAllLabels()

bool ts::TSPacketMetadata::hasAllLabels ( const TSPacketLabelSet mask) const
inline

Check if the TS packet has all labels set from a set of labels.

Parameters
[in]maskThe mask of labels to check.
Returns
True if the TS packet has all labels from mask.

◆ labels()

TSPacketLabelSet ts::TSPacketMetadata::labels ( ) const
inline

Get all labels from the TS packet.

Returns
The set of all labels from the TS packet.

◆ setLabel()

void ts::TSPacketMetadata::setLabel ( size_t  label)
inline

Set a specific label for the TS packet.

Parameters
[in]labelThe label to set.

◆ setLabels()

void ts::TSPacketMetadata::setLabels ( const TSPacketLabelSet mask)
inline

Set a specific set of labels for the TS packet.

Parameters
[in]maskThe mask of labels to set.

◆ clearLabel()

void ts::TSPacketMetadata::clearLabel ( size_t  label)
inline

Clear a specific label for the TS packet.

Parameters
[in]labelThe label to clear.

◆ clearLabels()

void ts::TSPacketMetadata::clearLabels ( const TSPacketLabelSet mask)
inline

Clear a specific set of labels for the TS packet.

Parameters
[in]maskThe mask of labels to clear.

◆ labelsString()

UString ts::TSPacketMetadata::labelsString ( const UString separator = u" ",
const UString none = u"none" 
) const

Get the list of labels as a string, typically for debug messages.

Parameters
[in]separatorSeparator between labale values.
[in]noneString to display when there is no label set.
Returns
List of labels as a string.

◆ getInputTimeStamp()

PCR ts::TSPacketMetadata::getInputTimeStamp ( ) const
inline

Get the optional input time stamp of the packet.

Returns
The input time stamp in PCR units (27 MHz) or INVALID_PCR if there is none.
  • The input time stamp is optional. It may be set by the input plugin or by tsp or not set at all.
  • Its precision, accuracy and reliability are unspecified. It may be set by tsp software (based on internal clock), by the receiving hardware (the NIC for instance) or by some external source (RTP or M2TS time stamp).
  • It is a monotonic clock which wraps up after MAX_PCR (at least).
  • It can also wrap up at any other input-specific value. For instance, M2TS files use 30-bit timestamps in PCR units. So, for M2TS the input time stamps wrap up every 39 seconds.
  • Although expressed in PCR units, it does not share the same reference clock with the various PCR in the transport stream. You can compare time stamp differences, not absolute values.

◆ getInputTimeSource()

TimeSource ts::TSPacketMetadata::getInputTimeSource ( ) const
inline

Get the identification of the source of the input time stamp.

Returns
An identifier for the source of the input time stamp.

◆ hasInputTimeStamp()

bool ts::TSPacketMetadata::hasInputTimeStamp ( ) const
inline

Check if the packet has an input time stamp.

Returns
True if the packet has an input time stamp.

◆ setInputTimeStamp()

template<class Rep , class Period >
void ts::TSPacketMetadata::setInputTimeStamp ( const cn::duration< Rep, Period > &  time_stamp,
TimeSource  source 
)

Set the optional input time stamp of the packet.

Parameters
[in]time_stampInput time stamp value. This value should be taken from a monotonic clock.
[in]sourceIdentification of time stamp source.
See also
getInputTimeStamp()

◆ inputTimeStampString()

UString ts::TSPacketMetadata::inputTimeStampString ( const UString none = u"none") const

Get the input time stamp as a string, typically for debug messages.

Parameters
[in]noneString to display when there is no label set.
Returns
Input time stamp as a string.

◆ setAuxData()

void ts::TSPacketMetadata::setAuxData ( const void *  data,
size_t  size 
)

Copy bytes into the auxiliary data.

The auxiliary data are made of up to 16 bytes and are attached to the packet metadata. There is no predefined usage for auxiliary data. In practice, they are read from the 16-byte trailer which can be found in some modulation systems, after the TS packet.

Parameters
data[in] Address of data to copy into the auxiliary data.
size[in] Size in bytes of the data to copy. Up to 16 bytes are used, the rest is ignored.

◆ getAuxData() [1/2]

size_t ts::TSPacketMetadata::getAuxData ( void *  data,
size_t  max_size 
) const

Copy bytes from the auxiliary data.

Parameters
data[out] Address of user buffer to receive the auxiliary data.
max_size[in] Maximum size in bytes of the user buffer.
Returns
Number of copied bytes. Usually 0 or 16. Never more than 16.
See also
setAuxData()

◆ getAuxData() [2/2]

void ts::TSPacketMetadata::getAuxData ( void *  data,
size_t  max_size,
uint8_t  pad 
) const

Copy bytes from the auxiliary data and pad user buffer if necessary.

Parameters
data[out] Address of user buffer to receive the auxiliary data.
max_size[in] Maximum size in bytes of the user buffer.
pad[in] Pad value to copy in all additional bytes in the user's buffer if the auxiliary data are shorter than max_size.
See also
setAuxData()

◆ auxDataSize()

size_t ts::TSPacketMetadata::auxDataSize ( ) const
inline

Size in bytes of the auxiliary data.

Returns
The size in bytes of the auxiliary data.
See also
setAuxData()

◆ auxData() [1/2]

const uint8_t * ts::TSPacketMetadata::auxData ( ) const
inline

Direct access to the auxiliary data.

Returns
Address of the auxiliary data inside this object.
See also
setAuxData()

◆ auxData() [2/2]

uint8_t * ts::TSPacketMetadata::auxData ( )
inline

Direct access to the auxiliary data.

Returns
Address of the auxiliary data inside this object.
See also
setAuxData()

◆ Copy()

static void ts::TSPacketMetadata::Copy ( TSPacketMetadata dest,
const TSPacketMetadata source,
size_t  count 
)
static

Copy contiguous TS packet metadata.

Parameters
[out]destAddress of the first contiguous TS packet metadata to write.
[in]sourceAddress of the first contiguous TS packet metadata to read.
[in]countNumber of TS packet metadata to copy.

◆ Reset()

static void ts::TSPacketMetadata::Reset ( TSPacketMetadata dest,
size_t  count 
)
static

Reset contiguous TS packet metadata.

Parameters
[out]destAddress of the first contiguous TS packet metadata to reset.
[in]countNumber of TS packet metadata to copy.

◆ serialize() [1/2]

void ts::TSPacketMetadata::serialize ( ByteBlock bin) const

Serialize the content of this instance into a byteblock.

The serialized data is a fixed size block of SERIALIZATION_SIZE bytes. The auxiliary data are not included in the serialized buffer.

Parameters
[out]binReturned binary data.

◆ serialize() [2/2]

size_t ts::TSPacketMetadata::serialize ( void *  data,
size_t  size 
) const

Serialize the content of this instance into a memory area.

The serialized data is a fixed size block of SERIALIZATION_SIZE bytes. The auxiliary data are not included in the serialized buffer.

Parameters
[out]dataAddress of the memory area.
[in]sizeSize in bytes of the memory area.
Returns
Size in bytes of the data, zero on error (buffer too short).

◆ deserialize() [1/2]

bool ts::TSPacketMetadata::deserialize ( const ByteBlock bin)
inline

Deserialize the content of this instance from a byteblock.

Parameters
[in]binBinary data containing a serialized instance of TSPacketMetadata.
Returns
True if everything has been deserialized. False if the input data block is too short. In the latter case, the missing field get their default value.

◆ deserialize() [2/2]

bool ts::TSPacketMetadata::deserialize ( const void *  data,
size_t  size 
)

Deserialize the content of this instance from a byteblock.

Parameters
[in]dataAddress of binary data containing a serialized instance of TSPacketMetadata.
[in]sizeSize in bytes of these data.
Returns
True if everything has been deserialized. False if the input data block is too short. In the latter case, the missing field get their default value.

◆ DisplayLayout()

static void ts::TSPacketMetadata::DisplayLayout ( std::ostream &  out,
const char *  prefix = "" 
)
static

Display the structure layout of the data structure (for debug only).

Parameters
[in,out]outOutput stream, where to display.
[in]prefixOptional prefix on each line.

Member Data Documentation

◆ AUX_DATA_MAX_SIZE

constexpr size_t ts::TSPacketMetadata::AUX_DATA_MAX_SIZE = 16
staticconstexpr

Maximum size in bytes of auxiliary data.

See also
setAuxData()

◆ SERIALIZATION_MAGIC

constexpr uint8_t ts::TSPacketMetadata::SERIALIZATION_MAGIC = SYNC_BYTE ^ 0xFF
staticconstexpr

First "magic" byte of the structure into which a TSPacketMetadata was serialized.

Intentionally the opposite of the TS packet synchro byte.


The documentation for this class was generated from the following file: