X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FMPEGDVBBundle%2FTransportPacket.hh;h=38200d523778fdd4cfd262c4fdc0de20a522060b;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=9a935b9e37c0061088a3964f20b33904b3135517;hpb=e61f824b022bb50e9e04598db860a67b644b6818;p=senf.git diff --git a/Packets/MPEGDVBBundle/TransportPacket.hh b/Packets/MPEGDVBBundle/TransportPacket.hh index 9a935b9..38200d5 100644 --- a/Packets/MPEGDVBBundle/TransportPacket.hh +++ b/Packets/MPEGDVBBundle/TransportPacket.hh @@ -1,9 +1,9 @@ -// $Id:DatagramSection.hh 327 2007-07-20 10:03:44Z tho $ +// $Id:TransportPacket.hh 560 2007-12-13 14:39:37Z tho $ // // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Stefan Bund +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Thorsten Horstmann // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -20,77 +20,97 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#ifndef HH_TransportPacket_ -#define HH_TransportPacket_ 1 +/** \file + \brief TransportPacket public header */ + +#ifndef HH_SENF_Packets_MPEGDVBBundle_TransportPacket_ +#define HH_SENF_Packets_MPEGDVBBundle_TransportPacket_ 1 // Custom includes -#include -#include "Packets/PacketType.hh" -#include "Packets/ParseInt.hh" -#include "Packets/PacketRegistry.hh" -#include "Packets/PacketParser.hh" +#include "../../Packets/Packets.hh" //#include "TransportPacket.mpp" ///////////////////////////////hh.p//////////////////////////////////////// namespace senf { - /** \brief Parse a UDP packet + /** \brief Parse a Transport Stream packet - Parser implementing the header of a MPEG Transport Stream Packet. + Parser implementing the header of a MPEG Transport Stream packet. + \image html TransportPacket.png \see TransportPacketType */ - struct Parse_TransportPacket : public PacketParserBase + struct TransportPacketParser : public PacketParserBase { - typedef Parse_Flag < 0 > Parse_tei; // transport_error_indicator - typedef Parse_Flag < 1 > Parse_pusi; // payload_unit_start_indicator - typedef Parse_Flag < 2 > Parse_transportPrio; // transport_priority - typedef Parse_UIntField < 2, 16 > Parse_pid; - typedef Parse_UIntField < 0, 2 > Parse_tsc; // transport_scrambling_control - typedef Parse_UIntField < 2, 4 > Parse_adaptCtrl; // adaptation_field_control - typedef Parse_UIntField < 4, 8 > Parse_contCounter; // continuity_counter - -# ifndef DOXYGEN - - SENF_PACKET_PARSER_INIT(Parse_TransportPacket); - - SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS( - ((Field ) ( sync_byte, Parse_UInt8 )) - ((OverlayField) ( transport_error_indicator, Parse_tei )) - ((OverlayField) ( pusi, Parse_pusi )) - ((OverlayField) ( transport_priority, Parse_transportPrio )) - ((Field ) ( pid, Parse_pid )) - ((OverlayField) ( transport_scrmbl_ctrl, Parse_tsc )) - ((OverlayField) ( adaptation_field_ctrl, Parse_adaptCtrl )) - ((Field ) ( continuity_counter, Parse_contCounter )) - ); - -# else +# include SENF_PARSER() + + SENF_PARSER_FIELD ( sync_byte, UInt8Parser ); + + SENF_PARSER_BITFIELD ( transport_error_indicator, 1, bool ); + SENF_PARSER_BITFIELD_RO ( pusi, 1, bool ); + SENF_PARSER_BITFIELD ( transport_priority, 1, bool ); + SENF_PARSER_BITFIELD ( pid, 13, unsigned ); + SENF_PARSER_BITFIELD ( transport_scrmbl_ctrl, 2, unsigned ); + SENF_PARSER_BITFIELD ( adaptation_field_ctrl, 2, unsigned ); + SENF_PARSER_BITFIELD ( continuity_counter, 4, unsigned ); + + SENF_PARSER_PRIVATE_VARIANT ( pointer_field_, pusi, + (senf::VoidPacketParser) (UInt8Parser) ); - Parse_UInt8 sync_byte() const; - Parse_tei transport_error_indicator() const; - Parse_pusi pusi() const; - Parse_transportPrio transport_priority() const; - Parse_pid pid() const; - Parse_tsc transport_scrmbl_ctrl() const; - Parse_adaptCtrl adaptation_field_ctrl() const; - Parse_contCounter continuity_counter() const; - -# endif + SENF_PARSER_FINALIZE( TransportPacketParser ); -// Parse_UInt8 payload_pointer() const { -// return parse( Parse_TransportPacket::fixed_bytes ); -// } + UInt8Parser pointer_field() const; + void init_fields() const; + void setPUSI(bool pusi) const; + + SENF_PARSER_INIT() { + defaultInit(); + init_fields(); + } }; /** \brief Transport Stream packet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SyntaxNo. of bits
transport_packet() {
\ref TransportPacketParser::sync_byte() "sync_byte"8
\ref TransportPacketParser::transport_error_indicator() "transport_error_indicator"1
\ref TransportPacketParser::pusi() "payload_uni_start_indicator"1
\ref TransportPacketParser::transport_priority() "transport_priority"1
\ref TransportPacketParser::pid() "PID"13
\ref TransportPacketParser::transport_scrmbl_ctrl() "transport_scrambling_control"2
\ref TransportPacketParser::adaptation_field_ctrl() "adaptation_field_control"2
\ref TransportPacketParser::continuity_counter() "continuity_counter"4
}
+ \par Packet type (typedef): \ref TransportPacket \par Fields: - \ref Parse_TransportPacket + \ref TransportPacketParser \ingroup protocolbundle_mpegdvb */ @@ -98,21 +118,23 @@ namespace senf { : public PacketTypeBase, public PacketTypeMixin { +#ifndef DOXYGEN typedef PacketTypeMixin mixin; - typedef ConcretePacket packet; - typedef Parse_TransportPacket parser; +#endif + typedef ConcretePacket packet; ///< Transport packet typedef + typedef TransportPacketParser parser; ///< typedef to the parser of Transport packet using mixin::nextPacketRange; - // using mixin::nextPacketType; using mixin::init; using mixin::initSize; + /** \brief Dump given Transport packet in readable form to given output stream */ static void dump(packet p, std::ostream & os); + static const byte SYNC_BYTE = 0x47; }; /** \brief Transport packet typedef */ - typedef TransportPacketType::packet TransportPacket; - + typedef ConcretePacket TransportPacket; }