TSDuck v3.38-3691
MPEG Transport Stream Toolkit
Loading...
Searching...
No Matches
ts::OneShotPacketizer Class Reference

Packetization of MPEG sections into Transport Stream packets in one shot. More...

#include <tsOneShotPacketizer.h>

Inheritance diagram for ts::OneShotPacketizer:
Collaboration diagram for ts::OneShotPacketizer:

Public Types

enum class  StuffingPolicy {
  NEVER ,
  AT_END ,
  ALWAYS
}
 Specify where stuffing applies. More...
 

Public Member Functions

 OneShotPacketizer (const DuckContext &duck, PID pid=PID_NULL, bool do_stuffing=false, const BitRate &bitrate=0)
 Default constructor.
 
virtual ~OneShotPacketizer () override
 Virtual destructor.
 
void addSection (const SectionPtr &section, cn::milliseconds repetition_rate=cn::milliseconds::zero())
 Add one section into the packetizer.
 
void addSections (const SectionPtrVector &sections, cn::milliseconds repetition_rate=cn::milliseconds::zero())
 Add some sections into the packetizer.
 
void addTable (const BinaryTable &table, cn::milliseconds repetition_rate=cn::milliseconds::zero())
 Add all sections of a binary table into the packetizer.
 
void addTable (DuckContext &duck, const AbstractTable &table, cn::milliseconds repetition_rate=cn::milliseconds::zero())
 Add all sections of a typed table into the packetizer.
 
void allowHeaderSplit (bool allow)
 Allow or disallow splitting section headers across TS packets.
 
bool atCycleBoundary () const
 Check if the last generated packet was the last packet in the cycle.
 
bool atSectionBoundary () const
 Check if the packet stream is exactly at a section boundary.
 
BitRate bitRate () const
 Get the bitrate of the generated PID.
 
virtual std::ostream & display (std::ostream &strm) const override
 Display the internal state of the packetizer, mainly for debug.
 
const DuckContextduck () const
 Get a reference to the TSDuck execution context.
 
void getPackets (TSPacketVector &packets)
 Get a complete cycle as one list of TS packets.
 
PID getPID () const
 Get the default PID for subsequent MPEG packets.
 
bool headerSplitAllowed () const
 Check if splitting section headers across TS packets is allowed.
 
uint8_t nextContinuityCounter () const
 Get the continuity counter value for next MPEG packet.
 
PacketCounter packetCount () const
 Get the number of generated TS packets so far.
 
void removeAll ()
 Remove all sections in the packetizer.
 
void removeSections (TID tid)
 Remove all sections with the specified table id.
 
void removeSections (TID tid, uint16_t tid_ext)
 Remove all sections with the specified table id and table id extension.
 
void removeSections (TID tid, uint16_t tid_ext, uint8_t sec_number)
 Remove all sections with the specified table id, table id extension and section number.
 
Reportreport () const
 Get a reference to the debugging report.
 
virtual void reset () override
 Reset the packetizer.
 
SectionCounter sectionCount () const
 Get the number of completely packetized sections so far.
 
SectionProviderInterfacesectionProvider () const
 Get the object which provides MPEG sections when the packetizer needs a new section.
 
void setBitRate (const BitRate &bitrate)
 Set the bitrate of the generated PID.
 
void setNextContinuityCounter (uint8_t cc)
 Set the continuity counter value for next MPEG packet.
 
void setPID (PID pid)
 Set the default PID for subsequent MPEG packets.
 
void setStuffingPolicy (bool do_stuffing)
 Set the stuffing policy.
 
SectionCounter storedSectionCount () const
 Get the number of stored sections to packetize.
 
StuffingPolicy stuffingPolicy () const
 Get the TS packet stuffing policy at end of packet.
 

Protected Member Functions

void configurePacket (TSPacket &pkt, bool nullify)
 Configure a TS packet with continuity and PID.
 

Detailed Description

Packetization of MPEG sections into Transport Stream packets in one shot.

Member Enumeration Documentation

◆ StuffingPolicy

enum class ts::CyclingPacketizer::StuffingPolicy
stronginherited

Specify where stuffing applies.

Enumerator
NEVER 

No stuffing, always pack sections.

AT_END 

Stuffing at end of cycle, pack sections inside cycle.

ALWAYS 

Always stuffing, never pack sections.

Constructor & Destructor Documentation

◆ OneShotPacketizer()

ts::OneShotPacketizer::OneShotPacketizer ( const DuckContext duck,
PID  pid = PID_NULL,
bool  do_stuffing = false,
const BitRate bitrate = 0 
)

Default constructor.

Parameters
[in]duckTSDuck execution context. The reference is kept inside the packetizer.
[in]pidPID for generated TS packets.
[in]do_stuffingTS packet stuffing at end of section.
[in]bitrateOutput bitrate, zero if undefined. Useful only when using specific repetition rates for sections

Member Function Documentation

◆ setStuffingPolicy()

void ts::OneShotPacketizer::setStuffingPolicy ( bool  do_stuffing)
inline

Set the stuffing policy.

Parameters
[in]do_stuffingTS packet stuffing at end of section.

◆ getPackets()

void ts::OneShotPacketizer::getPackets ( TSPacketVector packets)

Get a complete cycle as one list of TS packets.

Parameters
[out]packetsReturned list of TS packets containing a complete cycle.

◆ stuffingPolicy()

StuffingPolicy ts::CyclingPacketizer::stuffingPolicy ( ) const
inlineinherited

Get the TS packet stuffing policy at end of packet.

Returns
TS packet stuffing policy at end of packet.

◆ setBitRate()

void ts::CyclingPacketizer::setBitRate ( const BitRate bitrate)
inherited

Set the bitrate of the generated PID.

Useful only when using specific repetition rates for sections

Parameters
[in]bitrateOutput bitrate, zero if undefined.

◆ bitRate()

BitRate ts::CyclingPacketizer::bitRate ( ) const
inlineinherited

Get the bitrate of the generated PID.

Returns
Output bitrate, zero if undefined.

◆ addSection()

void ts::CyclingPacketizer::addSection ( const SectionPtr section,
cn::milliseconds  repetition_rate = cn::milliseconds::zero() 
)
inherited

Add one section into the packetizer.

The contents of the sections are shared.

Parameters
[in]sectionA smart pointer to the section to packetize.
[in]repetition_rateRepetition rate of the section in milliseconds. If zero, simply packetize sections one after the other.

◆ addSections()

void ts::CyclingPacketizer::addSections ( const SectionPtrVector sections,
cn::milliseconds  repetition_rate = cn::milliseconds::zero() 
)
inherited

Add some sections into the packetizer.

The contents of the sections are shared.

Parameters
[in]sectionsA vector of smart pointer to the sections to packetize.
[in]repetition_rateRepetition rate of the sections in milliseconds. If zero, simply packetize sections one after the other.

◆ addTable() [1/2]

void ts::CyclingPacketizer::addTable ( const BinaryTable table,
cn::milliseconds  repetition_rate = cn::milliseconds::zero() 
)
inherited

Add all sections of a binary table into the packetizer.

The contents of the sections are shared. If the table is not complete (there are missing sections), the sections which are present are individually added.

Parameters
[in]tableA binary table to packetize.
[in]repetition_rateRepetition rate of the sections in milliseconds. If zero, simply packetize sections one after the other.

◆ addTable() [2/2]

void ts::CyclingPacketizer::addTable ( DuckContext duck,
const AbstractTable table,
cn::milliseconds  repetition_rate = cn::milliseconds::zero() 
)
inherited

Add all sections of a typed table into the packetizer.

Parameters
[in,out]duckTSDuck execution context.
[in]tableA table to packetize.
[in]repetition_rateRepetition rate of the sections in milliseconds. If zero, simply packetize sections one after the other.

◆ removeSections() [1/3]

void ts::CyclingPacketizer::removeSections ( TID  tid)
inherited

Remove all sections with the specified table id.

If one such section is currently being packetized, the rest of the section will be packetized.

Parameters
[in]tidThe table id of the sections to remove.

◆ removeSections() [2/3]

void ts::CyclingPacketizer::removeSections ( TID  tid,
uint16_t  tid_ext 
)
inherited

Remove all sections with the specified table id and table id extension.

If one such section is currently being packetized, the rest of the section will be packetized.

Parameters
[in]tidThe table id of the sections to remove.
[in]tid_extThe table id extension of the sections to remove.

◆ removeSections() [3/3]

void ts::CyclingPacketizer::removeSections ( TID  tid,
uint16_t  tid_ext,
uint8_t  sec_number 
)
inherited

Remove all sections with the specified table id, table id extension and section number.

If one such section is currently being packetized, the rest of the section will be packetized.

Parameters
[in]tidThe table id of the sections to remove.
[in]tid_extThe table id extension of the sections to remove.
[in]sec_numberThe section number of the sections to remove.

◆ removeAll()

void ts::CyclingPacketizer::removeAll ( )
inherited

Remove all sections in the packetizer.

If a section is currently being packetized, the rest of the section will be packetized.

◆ storedSectionCount()

SectionCounter ts::CyclingPacketizer::storedSectionCount ( ) const
inlineinherited

Get the number of stored sections to packetize.

Returns
The number of stored sections to packetize.

◆ atCycleBoundary()

bool ts::CyclingPacketizer::atCycleBoundary ( ) const
inherited

Check if the last generated packet was the last packet in the cycle.

Note that if the stuffing policy is NEVER, this is not reliable since it is unlikely that a packet actually terminates a cycle.

Returns
True when the last generated packet was the last packet in the cycle.

◆ reset()

virtual void ts::CyclingPacketizer::reset ( )
overridevirtualinherited

Reset the packetizer.

All unfinished items (sections or PES packets) are dropped.

Reimplemented from ts::Packetizer.

◆ display()

virtual std::ostream & ts::CyclingPacketizer::display ( std::ostream &  strm) const
overridevirtualinherited

Display the internal state of the packetizer, mainly for debug.

Parameters
[in,out]strmOutput text stream.
Returns
A reference to strm.

Reimplemented from ts::Packetizer.

◆ sectionProvider()

SectionProviderInterface * ts::Packetizer::sectionProvider ( ) const
inlineinherited

Get the object which provides MPEG sections when the packetizer needs a new section.

Returns
The object which will be called each time a section is required.

◆ atSectionBoundary()

bool ts::Packetizer::atSectionBoundary ( ) const
inlineinherited

Check if the packet stream is exactly at a section boundary.

Returns
True if the last returned packet contained the end of a section and no unfinished section.

◆ sectionCount()

SectionCounter ts::Packetizer::sectionCount ( ) const
inlineinherited

Get the number of completely packetized sections so far.

Returns
The number of completely packetized sections so far.

◆ allowHeaderSplit()

void ts::Packetizer::allowHeaderSplit ( bool  allow)
inlineinherited

Allow or disallow splitting section headers across TS packets.

By default, a Packetizer never splits a section header between two TS packets. This is not required by the MPEG standard but some STB are known to have problems with that.

Parameters
[in]allowIf true, splitting section headers across TS packets is allowed.

◆ headerSplitAllowed()

bool ts::Packetizer::headerSplitAllowed ( ) const
inlineinherited

Check if splitting section headers across TS packets is allowed.

Returns
True if splitting section headers across TS packets is allowed.

◆ setPID()

void ts::AbstractPacketizer::setPID ( PID  pid)
inlineinherited

Set the default PID for subsequent MPEG packets.

Parameters
[in]pidPID for generated TS packets.

◆ getPID()

PID ts::AbstractPacketizer::getPID ( ) const
inlineinherited

Get the default PID for subsequent MPEG packets.

Returns
PID for generated TS packets.

◆ setNextContinuityCounter()

void ts::AbstractPacketizer::setNextContinuityCounter ( uint8_t  cc)
inlineinherited

Set the continuity counter value for next MPEG packet.

This counter is automatically incremented at each packet. It is usually never a good idea to change this, except maybe before generating the first packet if the continuity must be preserved with the previous content of the PID.

Parameters
[in]ccNext continuity counter.

◆ nextContinuityCounter()

uint8_t ts::AbstractPacketizer::nextContinuityCounter ( ) const
inlineinherited

Get the continuity counter value for next MPEG packet.

Returns
Next continuity counter.

◆ packetCount()

PacketCounter ts::AbstractPacketizer::packetCount ( ) const
inlineinherited

Get the number of generated TS packets so far.

Returns
The number of generated TS packets so far.

◆ report()

Report & ts::AbstractPacketizer::report ( ) const
inlineinherited

Get a reference to the debugging report.

Returns
A reference to the debugging report.

◆ duck()

const DuckContext & ts::AbstractPacketizer::duck ( ) const
inlineinherited

Get a reference to the TSDuck execution context.

Returns
A reference to the TSDuck execution context.

◆ configurePacket()

void ts::AbstractPacketizer::configurePacket ( TSPacket pkt,
bool  nullify 
)
protectedinherited

Configure a TS packet with continuity and PID.

Also increment the number of generated packet. So this method must be called exactly once per packet.

Parameters
[in,out]pktTS packet to configure
[in]nullifyReturn a null packet instead (no data to return for now).

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