TSDuck v3.46-4930
MPEG Transport Stream Toolkit
Loading...
Searching...
No Matches

#include <tsDemuxedData.h>

Inheritance diagram for ts::DemuxedData:
Collaboration diagram for ts::DemuxedData:

Public Types

using SuperClass = DataBlock<>

Public Member Functions

 DemuxedData (const ByteBlock &content, PID source_pid=PID_NULL)
 DemuxedData (const ByteBlockPtr &content_ptr, PID source_pid=PID_NULL)
 DemuxedData (const DemuxedData &other, ShareMode mode)
 DemuxedData (const void *content, size_t content_size, PID source_pid=PID_NULL)
 DemuxedData (DemuxedData &&other) noexcept
 DemuxedData (PID source_pid=PID_NULL)
virtual ~DemuxedData () override
const UString & attribute () const
virtual void clear () override
virtual const uint8_t * content () const
DataBlock & copy (const DataBlock &other)
DemuxedData & copy (const DemuxedData &other)
PacketCounter firstTSPacketIndex () const
virtual bool isValid () const
PacketCounter lastTSPacketIndex () const
bool matchContent (const ByteBlock &pattern, const ByteBlock &mask=ByteBlock()) const
DemuxedData & operator= (const DemuxedData &other)
DemuxedData & operator= (DemuxedData &&other) noexcept
bool operator== (const DataBlock &other) const
bool operator== (const DemuxedData &other) const
size_t rawDataSize () const
void reload (const ByteBlock &content)
void reload (const ByteBlockPtr &content_ptr)
void reload (const void *content, size_t content_size)
virtual void reload (const ByteBlock &content, PID source_pid=PID_NULL)
virtual void reload (const ByteBlockPtr &content_ptr, PID source_pid=PID_NULL)
virtual void reload (const void *content, size_t content_size, PID source_pid=PID_NULL)
void setAttribute (const UString &attr)
void setFirstTSPacketIndex (PacketCounter i)
void setLastTSPacketIndex (PacketCounter i)
void setSourcePID (PID pid)
virtual size_t size () const
PID sourcePID () const

Static Public Member Functions

static size_t GetLengthField (const void *content, size_t content_size)
static bool ValidateLengthField (const void *content, size_t content_size, bool allow_extra_data)

Static Public Attributes

static constexpr size_t AFTER_LEN_BYTE_OFFSET = LEN_SIZE == 0 ? 0 : (LEN_OFFSET + LEN_SIZE + 7) / 8
static constexpr size_t LEN_BIT_OFFSET = LEN_SIZE == 0 ? 0 : LEN_OFFSET
static constexpr size_t LEN_BIT_SIZE = LEN_SIZE
static constexpr bool UNBOUNDED_IS_ALLOWED = UNBOUNDED_ALLOWED

Protected Member Functions

void rwAppend (const void *data, size_t dsize)
uint8_t * rwContent ()
void rwResize (size_t s)

Detailed Description

Base class for all kinds of demuxed data.

Member Typedef Documentation

◆ SuperClass

Explicit reference to superclass.

Constructor & Destructor Documentation

◆ DemuxedData() [1/6]

ts::DemuxedData::DemuxedData ( PID source_pid = PID_NULL)
inline

Default constructor.

Parameters
[in]source_pidPID from which the packet was read.

◆ DemuxedData() [2/6]

ts::DemuxedData::DemuxedData ( const DemuxedData & other,
ShareMode mode )

Copy constructor.

Parameters
[in]otherAnother instance to copy.
[in]modeThe data are either shared (ShareMode::SHARE) between the two instances or duplicated (ShareMode::COPY).

◆ DemuxedData() [3/6]

ts::DemuxedData::DemuxedData ( DemuxedData && other)
noexcept

Move constructor.

Parameters
[in,out]otherAnother instance to move.

◆ DemuxedData() [4/6]

ts::DemuxedData::DemuxedData ( const void * content,
size_t content_size,
PID source_pid = PID_NULL )

Constructor from full binary content.

Parameters
[in]contentAddress of the binary data.
[in]content_sizeSize in bytes of the data.
[in]source_pidPID from which the data was read.

◆ DemuxedData() [5/6]

ts::DemuxedData::DemuxedData ( const ByteBlock & content,
PID source_pid = PID_NULL )

Constructor from full binary content.

Parameters
[in]contentBinary packet data.
[in]source_pidPID from which the packet was read.

◆ DemuxedData() [6/6]

ts::DemuxedData::DemuxedData ( const ByteBlockPtr & content_ptr,
PID source_pid = PID_NULL )

Constructor from full binary content.

Parameters
[in]content_ptrSafe pointer to the binary data. The content is referenced, and thus shared. Do not modify the referenced ByteBlock from outside the DemuxedData.
[in]source_pidPID from which the data were read.

◆ ~DemuxedData()

virtual ts::DemuxedData::~DemuxedData ( )
overridevirtual

Virtual destructor.

Member Function Documentation

◆ clear()

virtual void ts::DemuxedData::clear ( )
overridevirtual

Clear data content.

Reimplemented from ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >.

Reimplemented in ts::PESPacket, ts::Section, and ts::T2MIPacket.

◆ reload() [1/6]

virtual void ts::DemuxedData::reload ( const void * content,
size_t content_size,
PID source_pid = PID_NULL )
virtual

Reload from full binary content.

Parameters
[in]contentAddress of the binary packet data.
[in]content_sizeSize in bytes of the packet.
[in]source_pidPID from which the data were read.

Reimplemented in ts::PESPacket, ts::Section, and ts::T2MIPacket.

◆ reload() [2/6]

virtual void ts::DemuxedData::reload ( const ByteBlock & content,
PID source_pid = PID_NULL )
virtual

Reload from full binary content.

Parameters
[in]contentBinary packet data.
[in]source_pidPID from which the data were read.

Reimplemented in ts::PESPacket, ts::Section, and ts::T2MIPacket.

◆ reload() [3/6]

virtual void ts::DemuxedData::reload ( const ByteBlockPtr & content_ptr,
PID source_pid = PID_NULL )
virtual

Reload from full binary content.

Parameters
[in]content_ptrSafe pointer to the binary packet data. The content is referenced, and thus shared. Do not modify the referenced ByteBlock from outside the DemuxedData.
[in]source_pidPID from which the data were read.

Reimplemented in ts::PESPacket, ts::Section, and ts::T2MIPacket.

◆ operator=() [1/2]

DemuxedData & ts::DemuxedData::operator= ( const DemuxedData & other)

Assignment operator. The packets are referenced, and thus shared between the two packet objects.

Parameters
[in]otherOther packet to assign to this object.
Returns
A reference to this object.

◆ operator=() [2/2]

DemuxedData & ts::DemuxedData::operator= ( DemuxedData && other)
noexcept

Move assignment operator.

Parameters
[in,out]otherOther packet to assign to this object.
Returns
A reference to this object.

◆ copy() [1/2]

DemuxedData & ts::DemuxedData::copy ( const DemuxedData & other)

Duplication. Similar to assignment but the data are duplicated.

Parameters
[in]otherOther data to duplicate into this object.
Returns
A reference to this object.

◆ operator==() [1/2]

bool ts::DemuxedData::operator== ( const DemuxedData & other) const

Equality operator. The source PID's are ignored, only the data contents are compared.

Parameters
[in]otherOther packet to compare.
Returns
True if the two packets are identical. False otherwise.

◆ sourcePID()

PID ts::DemuxedData::sourcePID ( ) const
inline

Get the source PID.

Returns
The source PID.

◆ setSourcePID()

void ts::DemuxedData::setSourcePID ( PID pid)
inline

Set the source PID.

Parameters
[in]pidThe source PID.

◆ firstTSPacketIndex()

PacketCounter ts::DemuxedData::firstTSPacketIndex ( ) const
inline

Index of first TS packet of the data in the demultiplexed stream. Usually valid only if the data were extracted by a demux.

Returns
The first TS packet of the data in the demultiplexed stream.

◆ lastTSPacketIndex()

PacketCounter ts::DemuxedData::lastTSPacketIndex ( ) const
inline

Index of last TS packet of the data in the demultiplexed stream. Usually valid only if the data were extracted by a demux.

Returns
The last TS packet of the data in the demultiplexed stream.

◆ setFirstTSPacketIndex()

void ts::DemuxedData::setFirstTSPacketIndex ( PacketCounter i)
inline

Set the first TS packet of the data in the demultiplexed stream.

Parameters
[in]iThe first TS packet of the data in the demultiplexed stream.

◆ setLastTSPacketIndex()

void ts::DemuxedData::setLastTSPacketIndex ( PacketCounter i)
inline

Set the last TS packet of the data in the demultiplexed stream.

Parameters
[in]iThe last TS packet of the data in the demultiplexed stream.

◆ setAttribute()

void ts::DemuxedData::setAttribute ( const UString & attr)
inline

Set a generic user-defined string as "attribute" of the object. The semantics of this attribute string is not defined. It is used by the application. The attribute string can be found in the <metadata> structure of the XML representation of a table.

Parameters
[in]attrGeneric string to set as attribute.

◆ attribute()

const UString & ts::DemuxedData::attribute ( ) const
inline

Get the generic user-defined "attribute" string of the object.

Returns
A constant reference to the attribute string in the object.
See also
setAttribute()

◆ isValid()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
virtual bool ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::isValid ( ) const
virtualinherited

Check if the data structure has valid content. The base implementation only checks that the binary data are allocated. The various constructors or methods which replace the binary content already check the validity of the length field, when there is one. Subclasses may override this method with additional checks.

Returns
True if the descriptor has valid content.

Reimplemented in ts::PESPacket, ts::Section, and ts::T2MIPacket.

◆ reload() [4/6]

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
void ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::reload ( const void * content,
size_t content_size )
inherited

Reload from full binary content.

Parameters
[in]contentAddress of the binary packet data.
[in]content_sizeSize in bytes of the packet.

◆ reload() [5/6]

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
void ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::reload ( const ByteBlock & content)
inherited

Reload from full binary content.

Parameters
[in]contentBinary packet data. The content is copied into a new byte block.

◆ reload() [6/6]

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
void ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::reload ( const ByteBlockPtr & content_ptr)
inherited

Reload from full binary content.

Parameters
[in]content_ptrSafe pointer to the binary packet data. The content is referenced, and thus shared. Do not modify the referenced ByteBlock from outside the DataBlock.

◆ copy() [2/2]

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
DataBlock & ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::copy ( const DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED > & other)
inherited

Duplication. Similar to assignment but the data are duplicated.

Parameters
[in]otherOther data to duplicate into this object.
Returns
A reference to this object.

◆ operator==() [2/2]

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
bool ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::operator== ( const DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED > & other) const
inherited

Equality operator. The source PID's are ignored, only the data contents are compared.

Parameters
[in]otherOther packet to compare.
Returns
True if the two packets are identical. False otherwise.

◆ content()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
virtual const uint8_t * ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::content ( ) const
virtualinherited

Access to the full binary content of the data. Do not modify content.

Returns
Address of the full binary content of the data. May be invalidated after modification.

◆ size()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
virtual size_t ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::size ( ) const
virtualinherited

Size of the logical binary content of the data. For subclasses of DataBlock, this is the logical size of the data structure inside the DataBlock blob.

Returns
Size of the logical binary content of the data.
See also
rawDataSize()

Reimplemented in ts::PESPacket.

◆ rawDataSize()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
size_t ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::rawDataSize ( ) const
inlineinherited

Size of the complete binary raw data containing the logical structure. Non-virtual method, always return the same result.

Returns
Size of the complete binary raw data.
See also
size()

◆ matchContent()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
bool ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::matchContent ( const ByteBlock & pattern,
const ByteBlock & mask = ByteBlock() ) const
inherited

Check if the start of the data matches a given pattern.

Parameters
[in]patternA byte block to compare with the start of the data.
[in]maskOptional mask to select meaningful bits in pattern.
Returns
Size of the binary content of the data.

◆ GetLengthField()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
size_t ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::GetLengthField ( const void * content,
size_t content_size )
staticinherited

Static method to extract the content of the length field.

Parameters
[in]contentAddress of the binary data. Can be the null pointer.
[in]content_sizeSize in bytes of the data.
Returns
The extracted length field or NPOS if the data structure does not contain a length field or if the length is "unbounded" (when allowed).

◆ ValidateLengthField()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
bool ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::ValidateLengthField ( const void * content,
size_t content_size,
bool allow_extra_data )
staticinherited

Static method to validate the content of the length field.

Parameters
[in]contentAddress of the binary data. Can be the null pointer.
[in]content_sizeSize in bytes of the data.
[in]allow_extra_dataIf true, additional data are allowed after the declared length.
Returns
True if the length field is valid, or the length field does not exist, or the length field is "unbounded" (when allowed).

◆ rwContent()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
uint8_t * ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::rwContent ( )
inlineprotectedinherited

Read/write access to the full binary content of the data for subclasses.

Returns
Address of the full binary content of the data.

◆ rwResize()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
void ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::rwResize ( size_t s)
protectedinherited

Resize the full binary content of the data for subclasses.

Parameters
[in]sNew size in bytes of the full binary content of the data.

◆ rwAppend()

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
void ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::rwAppend ( const void * data,
size_t dsize )
protectedinherited

Append raw data to the full binary content of the data for subclasses.

Parameters
[in]dataAddress of the new area to append.
[in]dsizeSize of the area to append.

Member Data Documentation

◆ LEN_BIT_OFFSET

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
size_t ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::LEN_BIT_OFFSET = LEN_SIZE == 0 ? 0 : LEN_OFFSET
staticconstexprinherited

Offset in bits of the length field from the beginning of the structure.

◆ LEN_BIT_SIZE

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
size_t ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::LEN_BIT_SIZE = LEN_SIZE
staticconstexprinherited

Size in bits of the length field. If zero, there is no length field.

◆ AFTER_LEN_BYTE_OFFSET

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
size_t ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::AFTER_LEN_BYTE_OFFSET = LEN_SIZE == 0 ? 0 : (LEN_OFFSET + LEN_SIZE + 7) / 8
staticconstexprinherited

Offset in bytes of the next byte after the length field. Zero if there is no length field.

◆ UNBOUNDED_IS_ALLOWED

template<const size_t LEN_OFFSET = 0, const size_t LEN_SIZE = 0, const bool UNBOUNDED_ALLOWED = false>
bool ts::DataBlock< LEN_OFFSET, LEN_SIZE, UNBOUNDED_ALLOWED >::UNBOUNDED_IS_ALLOWED = UNBOUNDED_ALLOWED
staticconstexprinherited

If true, the length field allows zero as an "unbounded" value.


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