TSDuck v3.46-4930
MPEG Transport Stream Toolkit
Loading...
Searching...
No Matches
ts::StandaloneTableDemux Class Reference

#include <tsStandaloneTableDemux.h>

Inheritance diagram for ts::StandaloneTableDemux:
Collaboration diagram for ts::StandaloneTableDemux:

Public Types

using SuperClass = AbstractDemux

Public Member Functions

 StandaloneTableDemux (DuckContext &duck, const PIDSet &pid_filter=NoPID())
virtual void addPID (PID pid)
virtual void addPIDs (const PIDSet &pids)
void clearTables ()
int demuxId () const
DuckContext & duck ()
virtual void feedPacket (const TSPacket &pkt) override
void fillAndFlushEITs ()
void getStatus (Status &status) const
bool hasErrors () const
virtual bool isFilteredPID (PID pid) const
void packAndFlushSections ()
virtual size_t pidCount () const
PacketCounter processedPackets () const
virtual void removePID (PID pid)
Report & report ()
virtual void reset () override
virtual void resetPID (PID pid) override
void setCurrentNext (bool current, bool next)
void setDemuxId (int id)
void setInvalidSectionHandler (InvalidSectionHandlerInterface *h)
virtual void setPIDFilter (const PIDSet &pid_filter)
void setSectionHandler (SectionHandlerInterface *h)
void setTableHandler (TableHandlerInterface *h)
void setTransportErrorLogLevel (int level)
size_t tableCount () const
const BinaryTablePtrVector & tables () const
PacketCounter totalPackets () const
void trackInvalidSectionVersions (bool on)

Protected Member Functions

bool afterCallingHandler (bool execute_delayed_operations=true)
void beforeCallingHandler (PID pid=PID_NULL)
virtual void immediateReset () override
virtual void immediateResetPID (PID pid) override

Detailed Description

A SectionDemux which extracts MPEG tables without external handler. All demuxed tables are accumulated inside the demux, until clear or reset.

Member Typedef Documentation

◆ SuperClass

Explicit reference to superclass.

Constructor & Destructor Documentation

◆ StandaloneTableDemux()

ts::StandaloneTableDemux::StandaloneTableDemux ( DuckContext & duck,
const PIDSet & pid_filter = NoPID() )

Constructor.

Parameters
[in,out]duckTSDuck execution context. The reference is kept inside the demux.
[in]pid_filterThe set of PID's to demux.

Member Function Documentation

◆ tableCount()

size_t ts::StandaloneTableDemux::tableCount ( ) const
inline

Get the number of demuxed tables so far.

Returns
The number of demuxed tables so far.

◆ tables()

const BinaryTablePtrVector & ts::StandaloneTableDemux::tables ( ) const
inline

Get shared pointers to all demuxed tables.

Returns
A constant reference to a vector of safe pointers to the received tables.

◆ clearTables()

void ts::StandaloneTableDemux::clearTables ( )
inline

Clear the received tables without resetting the demux. This can be useful to forget received tables (and free memory) without resetting the reception.

◆ reset()

virtual void ts::StandaloneTableDemux::reset ( )
overridevirtual

Reset the demux.

Useful when the transport stream changes. The PID filter and the handlers are not modified.

If invoked in an application-handler, the operation is delayed until the handler terminates. For subclass implementers, see beforeCallingHandler() and override immediateReset() instead of reset().

Reimplemented from ts::AbstractDemux.

◆ resetPID()

virtual void ts::StandaloneTableDemux::resetPID ( PID pid)
overridevirtual

Reset the demuxing context for one single PID. Forget all previous partially demuxed data on this PID.

If invoked in an application-handler, the operation is delayed until the handler terminates. For subclass implementers, see beforeCallingHandler() and override immediateResetPID() instead of resetPID().

Parameters
[in]pidThe PID to reset.

Reimplemented from ts::AbstractDemux.

◆ feedPacket()

virtual void ts::SectionDemux::feedPacket ( const TSPacket & pkt)
overridevirtualinherited

The following method feeds the demux with a TS packet.

Parameters
[in]pktA TS packet.

Reimplemented from ts::AbstractDemux.

◆ packAndFlushSections()

void ts::SectionDemux::packAndFlushSections ( )
inlineinherited

Pack sections in all incomplete tables and notify these rebuilt tables.

All incomplete tables which have not yet been notified are packed. This means that missing sections are ignored and the tables are built from existing sections only, as if they were contiguous. Then, the table handler is invoked for each table.

This may create inconsistent tables since sections are missing. But this may me useful at the end of a table collecting sessions to grab incomplete tables.

See also
BinaryTable::packSections()

◆ fillAndFlushEITs()

void ts::SectionDemux::fillAndFlushEITs ( )
inlineinherited

Add missing sections in all incomplete EIT's and notify these rebuilt tables.

All DVB Event Information Tables (EIT) which have not yet been notified are completed. Missing sections are added with sections without events. Then, the table handler is invoked for each table.

This is typically useful at the end of processing when segmented EIT's are collected but no empty section was collected at end of segments.

◆ setTableHandler()

void ts::SectionDemux::setTableHandler ( TableHandlerInterface * h)
inlineinherited

Replace the table handler.

Parameters
[in]hThe new handler.

◆ setSectionHandler()

void ts::SectionDemux::setSectionHandler ( SectionHandlerInterface * h)
inlineinherited

Replace the section handler.

Parameters
[in]hThe new handler.

◆ setInvalidSectionHandler()

void ts::SectionDemux::setInvalidSectionHandler ( InvalidSectionHandlerInterface * h)
inlineinherited

Replace the invalid section handler. This object is invoked each time an invalid section is extracted from the stream, maybe due to invalid section length, invalid CRC32, etc. This type of data block is not a valid section and is never used in the standard table or section handler.

Parameters
[in]hThe new handler.

◆ setCurrentNext()

void ts::SectionDemux::setCurrentNext ( bool current,
bool next )
inlineinherited

Filter sections based on current/next indicator.

Parameters
[in]currentGet "current" tables. This is true by default.
[in]nextGet "next" tables. This is false by default.

◆ trackInvalidSectionVersions()

void ts::SectionDemux::trackInvalidSectionVersions ( bool on)
inlineinherited

Track / untrack invalid section version numbers. By default, if a section version does not change, the section is ignored. When this tracking is enabled, the content of the sections are tracked and a table is demuxed when a section version does not change but the content changes. This is considered as an error according to MPEG rules.

Parameters
[in]onTrack invalid section versions. This is false by default.

◆ setTransportErrorLogLevel()

void ts::SectionDemux::setTransportErrorLogLevel ( int level)
inlineinherited

Set the log level for messages reporting transport stream errors in demux. By default, the log level is Severity::Debug.

Parameters
[in]levelThe new log level for messages reporting transport stream errors.

◆ getStatus()

void ts::SectionDemux::getStatus ( Status & status) const
inlineinherited

Get the current status of the demux.

Parameters
[out]statusThe returned status.

◆ hasErrors()

bool ts::SectionDemux::hasErrors ( ) const
inlineinherited

Check if the demux has errors.

Returns
True if any error counter is not zero.

◆ immediateReset()

virtual void ts::SectionDemux::immediateReset ( )
overrideprotectedvirtualinherited

Reset the demux immediately.

Reimplemented from ts::AbstractDemux.

◆ immediateResetPID()

virtual void ts::SectionDemux::immediateResetPID ( PID pid)
overrideprotectedvirtualinherited

Reset the demuxing context for one single PID immediately.

Parameters
[in]pidThe PID to reset.

Reimplemented from ts::AbstractDemux.

◆ report()

Report & ts::AbstractDemux::report ( )
inlineinherited

Get the associated Report.

Returns
A reference to the associated Report.

◆ duck()

DuckContext & ts::AbstractDemux::duck ( )
inlineinherited

Get the associated TSDuck execution context.

Returns
A reference to the associated DuckContext.

◆ setPIDFilter()

virtual void ts::AbstractDemux::setPIDFilter ( const PIDSet & pid_filter)
virtualinherited

Replace the list of PID's to filter. The method resetPID() is invoked on each removed PID.

Parameters
[in]pid_filterThe list of PID's to filter.

◆ addPID()

virtual void ts::AbstractDemux::addPID ( PID pid)
inlinevirtualinherited

Add one PID to filter.

Parameters
[in]pidThe new PID to filter.

Reimplemented in ts::MPEDemux.

◆ addPIDs()

virtual void ts::AbstractDemux::addPIDs ( const PIDSet & pids)
inlinevirtualinherited

Add several PID's to filter.

Parameters
[in]pidsThe list of new PID's to filter.

Reimplemented in ts::MPEDemux.

◆ removePID()

virtual void ts::AbstractDemux::removePID ( PID pid)
virtualinherited

Remove one PID to filter. The method resetPID() is invoked on pid.

Parameters
[in]pidThe PID to no longer filter.

Reimplemented in ts::MPEDemux.

◆ pidCount()

virtual size_t ts::AbstractDemux::pidCount ( ) const
inlinevirtualinherited

Get the current number of PID's being filtered.

Returns
The current number of PID's being filtered.

◆ totalPackets()

PacketCounter ts::AbstractDemux::totalPackets ( ) const
inlineinherited

Get the current total number of TS packets which were processed by the demux.

Returns
The current number of TS packets which were processed by the demux.

◆ processedPackets()

PacketCounter ts::AbstractDemux::processedPackets ( ) const
inlineinherited

Get the number of processed TS packets in filtered PIDs.

Returns
The number of processed TS packets.

◆ isFilteredPID()

virtual bool ts::AbstractDemux::isFilteredPID ( PID pid) const
inlinevirtualinherited

Check if a PID is filtered.

Parameters
[in]pidThe PID to test.
Returns
Tue if pid is filtered.

◆ setDemuxId()

void ts::AbstractDemux::setDemuxId ( int id)
inlineinherited

Set some arbitrary "demux id" value. This value is chosen and set by the application. It can be retrieved later if a table or section handler is used by several demux. The demux id is not interpreted by the demux, it is only stored for the application. The initial value of a demux id is zero.

Parameters
[in]idApplication-defined demux id to assign.

◆ demuxId()

int ts::AbstractDemux::demuxId ( ) const
inlineinherited

Get the "demux id" value, as previously stored by the application.

Returns
The application-defined demux id.

◆ beforeCallingHandler()

void ts::AbstractDemux::beforeCallingHandler ( PID pid = PID_NULL)
protectedinherited

Helper for subclass, before invoking an application-defined handler.

The idea is to protect the integrity of the demux during the execution of an application-defined handler. The handler is invoked in the middle of an operation but the handler may call reset() or resetPID(). Executing the reset in the middle of an operation may be problematic. By using beforeCallingHandler() and afterCallingHandler(), all reset operations in between are delayed after the execution of the handler.

Example:

try {
_handler->handleEvent(*this, pid, ...);
}
catch (...) {
throw;
}
bool afterCallingHandler(bool execute_delayed_operations=true)
void beforeCallingHandler(PID pid=PID_NULL)
Parameters
[in]pidThe PID for which the handler will be called. All reset operations on this PID will be delayed until afterCallingHandler().

◆ afterCallingHandler()

bool ts::AbstractDemux::afterCallingHandler ( bool execute_delayed_operations = true)
protectedinherited

Helper for subclass, after invoking an application-defined handler.

Parameters
[in]execute_delayed_operationsWhen true (the default), execute all pending reset operations.
Returns
True if a delayed reset was executed.
See also
beforeCallingHandler()

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