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

#include <tsAbstractDemux.h>

Inheritance diagram for ts::AbstractDemux:

Public Member Functions

virtual ~AbstractDemux ()
virtual void addPID (PID pid)
virtual void addPIDs (const PIDSet &pids)
int demuxId () const
DuckContext & duck ()
virtual void feedPacket (const TSPacket &pkt)
virtual bool isFilteredPID (PID pid) const
virtual size_t pidCount () const
PacketCounter processedPackets () const
virtual void removePID (PID pid)
Report & report ()
virtual void reset ()
virtual void resetPID (PID pid)
void setDemuxId (int id)
virtual void setPIDFilter (const PIDSet &pid_filter)
PacketCounter totalPackets () const

Protected Member Functions

 AbstractDemux (DuckContext &duck, const PIDSet &pid_filter=NoPID())
bool afterCallingHandler (bool execute_delayed_operations=true)
void beforeCallingHandler (PID pid=PID_NULL)
virtual void immediateReset ()
virtual void immediateResetPID (PID pid)

Detailed Description

Abstract base class for all sorts of demux from TS packets.

The application sets a number of PID's to filter. What is extracted from those PID's and how they are reported to the application depend on the concrete demux class.

Constructor & Destructor Documentation

◆ ~AbstractDemux()

virtual ts::AbstractDemux::~AbstractDemux ( )
virtual

Destructor.

◆ AbstractDemux()

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

Constructor for subclasses.

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

Member Function Documentation

◆ report()

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

Get the associated Report.

Returns
A reference to the associated Report.

◆ duck()

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

Get the associated TSDuck execution context.

Returns
A reference to the associated DuckContext.

◆ feedPacket()

virtual void ts::AbstractDemux::feedPacket ( const TSPacket & pkt)
virtual

The following method feeds the demux with a TS packet.

Parameters
[in]pktA TS packet.

Reimplemented in ts::ContinuityAnalyzer, ts::MPEDemux, ts::PESDemux, ts::SectionDemux, ts::T2MIDemux, and ts::TimeTrackerDemux.

◆ setPIDFilter()

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

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)
inlinevirtual

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)
inlinevirtual

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)
virtual

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
inlinevirtual

Get the current number of PID's being filtered.

Returns
The current number of PID's being filtered.

◆ totalPackets()

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

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
inline

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
inlinevirtual

Check if a PID is filtered.

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

◆ reset()

virtual void ts::AbstractDemux::reset ( )
virtual

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 in ts::StandaloneTableDemux.

◆ resetPID()

virtual void ts::AbstractDemux::resetPID ( PID pid)
virtual

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 in ts::StandaloneTableDemux.

◆ setDemuxId()

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

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
inline

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)
protected

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)
protected

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()

◆ immediateReset()

virtual void ts::AbstractDemux::immediateReset ( )
protectedvirtual

◆ immediateResetPID()

virtual void ts::AbstractDemux::immediateResetPID ( PID pid)
protectedvirtual

Reset the demuxing context for one single PID immediately.

Parameters
[in]pidThe PID to reset.

Reimplemented in ts::ContinuityAnalyzer, ts::PESDemux, ts::SectionDemux, ts::T2MIDemux, ts::TeletextDemux, and ts::TimeTrackerDemux.


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