1 // $Id:TransportPacket.hh 560 2007-12-13 14:39:37Z tho $
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 // Thorsten Horstmann <tho@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief TransportPacket public header */
26 #ifndef HH_TransportPacket_
27 #define HH_TransportPacket_ 1
31 #include "../../Packets/Packets.hh"
33 //#include "TransportPacket.mpp"
34 ///////////////////////////////hh.p////////////////////////////////////////
38 /** \brief Parse a Transport Stream packet
40 Parser implementing the header of a MPEG Transport Stream packet.
42 \see TransportPacketType
44 struct TransportPacketParser : public PacketParserBase
46 # include SENF_FIXED_PARSER()
48 SENF_PARSER_FIELD ( sync_byte, UInt8Parser );
50 SENF_PARSER_BITFIELD ( transport_error_indicator, 1, bool );
51 SENF_PARSER_BITFIELD ( pusi, 1, bool );
52 SENF_PARSER_BITFIELD ( transport_priority, 1, bool );
53 SENF_PARSER_BITFIELD ( pid, 13, unsigned );
54 SENF_PARSER_BITFIELD ( transport_scrmbl_ctrl, 2, unsigned );
55 SENF_PARSER_BITFIELD ( adaptation_field_ctrl, 2, unsigned );
56 SENF_PARSER_BITFIELD ( continuity_counter, 4, unsigned );
58 SENF_PARSER_FINALIZE( TransportPacketParser );
60 // UInt8Parser payload_pointer() const {
61 // return parse<UInt8Parser>( TransportPacketParser::fixed_bytes );
65 /** \brief Transport Stream packet
68 <tr style="text-align:center">
69 <th>Syntax</th><th>No. of bits</th></tr>
71 <td>transport_packet() {</td> <td></td>
74 <td style="padding-left:2em">\ref TransportPacketParser::sync_byte() "sync_byte"</td>
77 <td style="padding-left:2em">\ref TransportPacketParser::transport_error_indicator() "transport_error_indicator"</td>
80 <td style="padding-left:2em">\ref TransportPacketParser::pusi() "payload_uni_start_indicator"</td>
83 <td style="padding-left:2em">\ref TransportPacketParser::transport_priority() "transport_priority"</td>
86 <td style="padding-left:2em">\ref TransportPacketParser::pid() "PID"</td>
89 <td style="padding-left:2em">\ref TransportPacketParser::transport_scrmbl_ctrl() "transport_scrambling_control"</td>
92 <td style="padding-left:2em">\ref TransportPacketParser::adaptation_field_ctrl() "adaptation_field_control"</td>
95 <td style="padding-left:2em">\ref TransportPacketParser::continuity_counter() "continuity_counter"</td>
98 <td>}</td> <td></td></tr>
101 \par Packet type (typedef):
105 \ref TransportPacketParser
107 \ingroup protocolbundle_mpegdvb
109 struct TransportPacketType
110 : public PacketTypeBase,
111 public PacketTypeMixin<TransportPacketType>
113 typedef PacketTypeMixin<TransportPacketType> mixin;
114 typedef ConcretePacket<TransportPacketType> packet;
115 typedef TransportPacketParser parser;
117 using mixin::nextPacketRange;
119 using mixin::initSize;
121 static void dump(packet p, std::ostream & os);
124 /** \brief Transport packet typedef */
125 typedef TransportPacketType::packet TransportPacket;
127 #define TRANSPORT_PACKET_SYNC_BYTE 0x47
132 ///////////////////////////////hh.e////////////////////////////////////////
133 //#include "TransportPacket.cci"
134 //#include "TransportPacket.ct"
135 //#include "TransportPacket.cti"
142 // c-file-style: "senf"
143 // indent-tabs-mode: nil
144 // ispell-local-dictionary: "american"
145 // compile-command: "scons -u test"
146 // comment-column: 40