3 * Copyright (C) 2007 Alessandro Decina
6 * Alessandro Decina <alessandro@nnva.org>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library 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 GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 * Boston, MA 02111-1307, USA.
24 #ifndef GST_MPEGTS_PACKETIZER_H
25 #define GST_MPEGTS_PACKETIZER_H
28 #include <gst/base/gstadapter.h>
31 #define MPEGTS_NORMAL_PACKETSIZE 188
32 #define MPEGTS_M2TS_PACKETSIZE 192
33 #define MPEGTS_DVB_ASI_PACKETSIZE 204
34 #define MPEGTS_ATSC_PACKETSIZE 208
36 #define MPEGTS_MIN_PACKETSIZE MPEGTS_NORMAL_PACKETSIZE
37 #define MPEGTS_MAX_PACKETSIZE MPEGTS_ATSC_PACKETSIZE
41 #define GST_TYPE_MPEGTS_PACKETIZER \
42 (mpegts_packetizer_get_type())
43 #define GST_MPEGTS_PACKETIZER(obj) \
44 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MPEGTS_PACKETIZER,MpegTSPacketizer))
45 #define GST_MPEGTS_PACKETIZER_CLASS(klass) \
46 (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MPEGTS_PACKETIZER,MpegTSPacketizerClass))
47 #define GST_IS_MPEGTS_PACKETIZER(obj) \
48 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MPEGTS_PACKETIZER))
49 #define GST_IS_MPEGTS_PACKETIZER_CLASS(klass) \
50 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MPEGTS_PACKETIZER))
53 typedef struct _MpegTSPacketizer MpegTSPacketizer;
54 typedef struct _MpegTSPacketizerClass MpegTSPacketizerClass;
58 guint continuity_counter;
59 GstAdapter *section_adapter;
60 guint8 section_table_id;
63 } MpegTSPacketizerStream;
65 struct _MpegTSPacketizer {
69 /* streams hashed by pid */
70 MpegTSPacketizerStream **streams;
72 gboolean know_packet_size;
77 struct _MpegTSPacketizerClass {
78 GObjectClass object_class;
85 guint8 payload_unit_start_indicator;
86 guint8 adaptation_field_control;
87 guint8 continuity_counter;
94 } MpegTSPacketizerPacket;
102 guint16 subtable_extension;
103 guint section_length;
104 guint8 version_number;
105 guint8 current_next_indicator;
107 } MpegTSPacketizerSection;
112 /* the spec says sub_table_extension is the fourth and fifth byte of a
113 * section when the section_syntax_indicator is set to a value of "1". If
114 * section_syntax_indicator is 0, sub_table_extension will be set to 0 */
115 guint16 subtable_extension;
116 guint8 version_number;
118 } MpegTSPacketizerStreamSubtable;
124 } MpegTSPacketizerPacketReturn;
126 GType mpegts_packetizer_get_type(void);
128 MpegTSPacketizer *mpegts_packetizer_new (void);
129 void mpegts_packetizer_clear (MpegTSPacketizer *packetizer);
130 void mpegts_packetizer_push (MpegTSPacketizer *packetizer, GstBuffer *buffer);
131 gboolean mpegts_packetizer_has_packets (MpegTSPacketizer *packetizer);
132 MpegTSPacketizerPacketReturn mpegts_packetizer_next_packet (MpegTSPacketizer *packetizer,
133 MpegTSPacketizerPacket *packet);
134 void mpegts_packetizer_clear_packet (MpegTSPacketizer *packetizer,
135 MpegTSPacketizerPacket *packet);
136 void mpegts_packetizer_remove_stream(MpegTSPacketizer *packetizer,
139 gboolean mpegts_packetizer_push_section (MpegTSPacketizer *packetzer,
140 MpegTSPacketizerPacket *packet, MpegTSPacketizerSection *section);
141 GstStructure *mpegts_packetizer_parse_pat (MpegTSPacketizer *packetizer,
142 MpegTSPacketizerSection *section);
143 GstStructure *mpegts_packetizer_parse_pmt (MpegTSPacketizer *packetizer,
144 MpegTSPacketizerSection *section);
145 GstStructure *mpegts_packetizer_parse_nit (MpegTSPacketizer *packetizer,
146 MpegTSPacketizerSection *section);
147 GstStructure *mpegts_packetizer_parse_sdt (MpegTSPacketizer *packetizer,
148 MpegTSPacketizerSection *section);
149 GstStructure *mpegts_packetizer_parse_eit (MpegTSPacketizer *packetizer,
150 MpegTSPacketizerSection *section);
151 GstStructure *mpegts_packetizer_parse_tdt (MpegTSPacketizer *packetizer,
152 MpegTSPacketizerSection *section);
156 #endif /* GST_MPEGTS_PACKETIZER_H */