1 /*
2  * mpegtspacketizer.h -
3  * Copyright (C) 2013 Edward Hervey
4  *
5  * Authors:
6  *   Edward Hervey <edward@collabora.com>
7  *
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.
12  *
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.
17  *
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., 51 Franklin St, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  */
23 
24 #ifndef GST_MPEGTS_SECTION_H
25 #define GST_MPEGTS_SECTION_H
26 
27 #include <gst/gst.h>
28 #include <gst/mpegts/gstmpegtsdescriptor.h>
29 
30 G_BEGIN_DECLS
31 
32 typedef struct _GstMpegtsSection GstMpegtsSection;
33 
34 #define GST_TYPE_MPEGTS_SECTION (gst_mpegts_section_get_type())
35 #define GST_MPEGTS_SECTION(section) ((GstMpegtsSection*) section)
36 
37 #define GST_MPEGTS_SECTION_TYPE(section) (GST_MPEGTS_SECTION (section)->section_type)
38 
39 GST_MPEGTS_API
40 GType gst_mpegts_section_get_type (void);
41 
42 /**
43  * GstMpegtsSectionType:
44  * @GST_MPEGTS_SECTION_UNKNOWN: Unknown section type
45  * @GST_MPEGTS_SECTION_PAT: Program Association Table (ISO/IEC 13818-1)
46  * @GST_MPEGTS_SECTION_PMT: Program Map Table (ISO/IEC 13818-1)
47  * @GST_MPEGTS_SECTION_CAT: Conditional Access Table (ISO/IEC 13818-1)
48  * @GST_MPEGTS_SECTION_TSDT: Transport Stream Description Table (ISO/IEC 13818-1)
49  * @GST_MPEGTS_SECTION_EIT: Event Information Table (EN 300 468)
50  * @GST_MPEGTS_SECTION_NIT: Network Information Table (ISO/IEC 13818-1 / EN 300 468)
51  * @GST_MPEGTS_SECTION_BAT: Bouquet Association Table ((EN 300 468)
52  * @GST_MPEGTS_SECTION_SDT: Service Description Table (EN 300 468)
53  * @GST_MPEGTS_SECTION_TDT: Time and Date Table (EN 300 468)
54  * @GST_MPEGTS_SECTION_TOT: Time Offset Table (EN 300 468)
55  * @GST_MPEGTS_SECTION_ATSC_TVCT: ATSC Terrestrial Virtual Channel Table (A65)
56  * @GST_MPEGTS_SECTION_ATSC_CVCT: ATSC Cable Virtual Channel Table (A65)
57  * @GST_MPEGTS_SECTION_ATSC_MGT: ATSC Master Guide Table (A65)
58  * @GST_MPEGTS_SECTION_ATSC_ETT: ATSC Extended Text Table (A65)
59  * @GST_MPEGTS_SECTION_ATSC_EIT: ATSC Event Information Table (A65)
60  * @GST_MPEGTS_SECTION_ATSC_STT: ATSC System Time Table (A65)
61  *
62  * Types of #GstMpegtsSection that the library handles.
63  */
64 typedef enum {
65   GST_MPEGTS_SECTION_UNKNOWN           = 0,
66   GST_MPEGTS_SECTION_PAT,
67   GST_MPEGTS_SECTION_PMT,
68   GST_MPEGTS_SECTION_CAT,
69   GST_MPEGTS_SECTION_TSDT,
70   GST_MPEGTS_SECTION_EIT,
71   GST_MPEGTS_SECTION_NIT,
72   GST_MPEGTS_SECTION_BAT,
73   GST_MPEGTS_SECTION_SDT,
74   GST_MPEGTS_SECTION_TDT,
75   GST_MPEGTS_SECTION_TOT,
76   GST_MPEGTS_SECTION_ATSC_TVCT,
77   GST_MPEGTS_SECTION_ATSC_CVCT,
78   GST_MPEGTS_SECTION_ATSC_MGT,
79   GST_MPEGTS_SECTION_ATSC_ETT,
80   GST_MPEGTS_SECTION_ATSC_EIT,
81   GST_MPEGTS_SECTION_ATSC_STT
82 } GstMpegtsSectionType;
83 
84 /**
85  * GstMpegtsSectionTableID:
86  *
87  * Values for a #GstMpegtsSection table_id
88  *
89  * These are the registered ITU H.222.0 | ISO/IEC 13818-1 table_id variants.
90  *
91  * see also #GstMpegtsSectionATSCTableID, #GstMpegtsSectionDVBTableID, and
92  * #GstMpegtsSectionSCTETableID
93  */
94 typedef enum {
95   /* ITU H.222.0 / IEC 13818-1 */
96   GST_MTS_TABLE_ID_PROGRAM_ASSOCIATION		= 0x00,
97   GST_MTS_TABLE_ID_CONDITIONAL_ACCESS		= 0x01,
98   GST_MTS_TABLE_ID_TS_PROGRAM_MAP		= 0x02,
99   GST_MTS_TABLE_ID_TS_DESCRIPTION		= 0x03,
100   GST_MTS_TABLE_ID_14496_SCENE_DESCRIPTION	= 0x04,
101   GST_MTS_TABLE_ID_14496_OBJET_DESCRIPTOR	= 0x05,
102   GST_MTS_TABLE_ID_METADATA			= 0x06,
103   GST_MTS_TABLE_ID_IPMP_CONTROL_INFORMATION	= 0x07,
104 
105   /* 0x08 - 0x39 : ITU H.222.0 | ISO/IEC 13818-1 reserved */
106 
107   /* IEC 13818-6 (DSM-CC) */
108   GST_MTS_TABLE_ID_DSM_CC_MULTIPROTO_ENCAPSULATED_DATA	= 0x3A,
109   GST_MTS_TABLE_ID_DSM_CC_U_N_MESSAGES			= 0x3B,
110   GST_MTS_TABLE_ID_DSM_CC_DOWNLOAD_DATA_MESSAGES	= 0x3C,
111   GST_MTS_TABLE_ID_DSM_CC_STREAM_DESCRIPTORS		= 0x3D,
112   GST_MTS_TABLE_ID_DSM_CC_PRIVATE_DATA			= 0x3E,
113   GST_MTS_TABLE_ID_DSM_CC_ADDRESSABLE_SECTIONS		= 0x3F,
114 
115   /* Unset */
116   GST_MTS_TABLE_ID_UNSET = 0xFF
117 
118 } GstMpegtsSectionTableID;
119 
120 typedef gboolean (*GstMpegtsPacketizeFunc) (GstMpegtsSection *section);
121 
122 /**
123  * GstMpegtsSection:
124  * @section_type: The type of section
125  * @pid: The pid on which this section was found
126  * @table_id: The table id of this section
127  * @subtable_extension: This meaning differs per section. See the documentation
128  * of the parsed section type for the meaning of this field
129  * @version_number: Version of the section.
130  * @current_next_indicator: Applies to current/next stream or not
131  * @section_number: Number of the section (if multiple)
132  * @last_section_number: Number of the last expected section (if multiple)
133  * @crc: CRC
134  *
135  * Mpeg-TS Section Information (SI) (ISO/IEC 13818-1)
136  */
137 struct _GstMpegtsSection
138 {
139   /*< private >*/
140   GstMiniObject parent;
141 
142   /*< public >*/
143   GstMpegtsSectionType   section_type;
144 
145   guint16       pid;
146   guint8        table_id;
147 
148   guint16       subtable_extension;
149   guint8        version_number;
150 
151   gboolean      current_next_indicator;
152 
153   guint8        section_number;
154   guint8        last_section_number;
155 
156   guint32       crc;
157 
158   /*< private >*/
159   /* data: Points to beginning of section data
160    * i.e. the first byte is the table_id field */
161   guint8       *data;
162   /* section_length: length of data (including final CRC if present) */
163   guint		section_length;
164   /* cached_parsed: cached copy of parsed section */
165   gpointer     *cached_parsed;
166   /* destroy_parsed: function to clear cached_parsed */
167   GDestroyNotify destroy_parsed;
168   /* offset: offset of the section within the container stream */
169   guint64       offset;
170   /* short_section: TRUE if section_syntax_indicator == 0
171    * FIXME : Maybe make public later on when allowing creation of
172    * sections to that people can create private short sections ? */
173   gboolean      short_section;
174   GstMpegtsPacketizeFunc packetizer;
175 
176   /* Padding for future extension */
177   gpointer _gst_reserved[GST_PADDING];
178 };
179 
180 GST_MPEGTS_API
181 GBytes *gst_mpegts_section_get_data (GstMpegtsSection *section);
182 
183 /* PAT */
184 #define GST_TYPE_MPEGTS_PAT_PROGRAM (gst_mpegts_pat_program_get_type())
185 
186 typedef struct _GstMpegtsPatProgram GstMpegtsPatProgram;
187 /**
188  * GstMpegtsPatProgram:
189  * @program_number: the program number
190  * @network_or_program_map_PID: the network of program map PID
191  *
192  * A program entry from a Program Association Table (ITU H.222.0, ISO/IEC 13818-1).
193  */
194 struct _GstMpegtsPatProgram
195 {
196   guint16 program_number;
197   guint16 network_or_program_map_PID;
198 };
199 
200 GST_MPEGTS_API
201 GPtrArray *gst_mpegts_section_get_pat (GstMpegtsSection *section);
202 
203 GST_MPEGTS_API
204 GType gst_mpegts_pat_program_get_type (void);
205 
206 GST_MPEGTS_API
207 GPtrArray *gst_mpegts_pat_new (void);
208 
209 GST_MPEGTS_API
210 GstMpegtsPatProgram *gst_mpegts_pat_program_new (void);
211 
212 GST_MPEGTS_API
213 GstMpegtsSection *gst_mpegts_section_from_pat (GPtrArray * programs,
214     guint16 ts_id);
215 
216 /* CAT */
217 
218 GST_MPEGTS_API
219 GPtrArray *gst_mpegts_section_get_cat (GstMpegtsSection *section);
220 
221 /* PMT */
222 typedef struct _GstMpegtsPMTStream GstMpegtsPMTStream;
223 typedef struct _GstMpegtsPMT GstMpegtsPMT;
224 #define GST_TYPE_MPEGTS_PMT (gst_mpegts_pmt_get_type())
225 #define GST_TYPE_MPEGTS_PMT_STREAM (gst_mpegts_pmt_stream_get_type())
226 
227 /**
228  * GstMpegtsStreamType:
229  * @GST_MPEGTS_STREAM_TYPE_RESERVED_00: ITU-T | ISO/IEC Reserved
230  * @GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1: ISO/IEC 11172-2 Video
231  * @GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2: Rec. ITU-T H.262 | ISO/IEC 13818-2
232  * Video or ISO/IEC 11172-2 constrained parameter video stream
233  * @GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG1: ISO/IEC 11172-3 Audio
234  * @GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG2: ISO/IEC 13818-3 Audio
235  * @GST_MPEGTS_STREAM_TYPE_PRIVATE_SECTIONS: private sections
236  * @GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS: PES packets containing private data
237  * @GST_MPEGTS_STREAM_TYPE_MHEG: ISO/IEC 13522 MHEG
238  * @GST_MPEGTS_STREAM_TYPE_DSM_CC: Annex A DSM-CC
239  * @GST_MPEGTS_STREAM_TYPE_H_222_1: Rec. ITU-T H.222.1
240  * @GST_MPEGTS_STREAM_TYPE_DSMCC_A: ISO/IEC 13818-6 type A
241  * @GST_MPEGTS_STREAM_TYPE_DSMCC_B: ISO/IEC 13818-6 type B
242  * @GST_MPEGTS_STREAM_TYPE_DSMCC_C: ISO/IEC 13818-6 type C
243  * @GST_MPEGTS_STREAM_TYPE_DSMCC_D: ISO/IEC 13818-6 type D
244  * @GST_MPEGTS_STREAM_TYPE_AUXILIARY: auxiliary streams
245  * @GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS: ISO/IEC 13818-7 Audio with ADTS
246  * transport syntax
247  * @GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG4: ISO/IEC 14496-2 Visual
248  * @GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_LATM: ISO/IEC 14496-3 Audio with the LATM
249  * transport syntax as defined in ISO/IEC 14496-3
250  * @GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS: ISO/IEC 14496-1
251  * SL-packetized stream or FlexMux stream carried in PES packets
252  * @GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_SECTIONS: ISO/IEC 14496-1 SL-packetized
253  * stream or FlexMux stream carried in ISO/IEC 14496_sections
254  * @GST_MPEGTS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD: ISO/IEC 13818-6 Synchronized
255  * Download Protocol
256  * @GST_MPEGTS_STREAM_TYPE_METADATA_PES_PACKETS: Metadata carried in PES packets
257  * @GST_MPEGTS_STREAM_TYPE_METADATA_SECTIONS: Metadata carried in metadata_sections
258  * @GST_MPEGTS_STREAM_TYPE_METADATA_DATA_CAROUSEL: Metadata carried in ISO/IEC
259  * 13818-6 Data Carousel
260  * @GST_MPEGTS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL: Metadata carried in
261  * ISO/IEC 13818-6 Object Carousel
262  * @GST_MPEGTS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD: Metadata carried in
263  * ISO/IEC 13818-6 Synchronized Download Protocol
264  * @GST_MPEGTS_STREAM_TYPE_MPEG2_IPMP: IPMP stream (defined in ISO/IEC 13818-11,
265  * MPEG-2 IPMP)
266  * @GST_MPEGTS_STREAM_TYPE_VIDEO_H264: AVC video stream conforming to one or
267  * more profiles defined in Annex A of Rec. ITU-T H.264 | ISO/IEC 14496-10 or
268  * AVC video sub-bitstream of SVC as defined in 2.1.78 or MVC base view
269  * sub-bitstream, as defined in 2.1.85, or AVC video sub-bitstream of MVC, as
270  * defined in 2.1.88
271  * @GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_CLEAN: ISO/IEC 14496-3 Audio, without
272  * using any additional transport syntax, such as DST, ALS and SLS
273  * @GST_MPEGTS_STREAM_TYPE_MPEG4_TIMED_TEXT: ISO/IEC 14496-17 Text
274  * @GST_MPEGTS_STREAM_TYPE_VIDEO_RVC: Auxiliary video stream as defined in
275  * ISO/IEC 23002-3
276  * @GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM: SVC video sub-bitstream
277  * of an AVC video stream conforming to one or more profiles defined in Annex G
278  * of Rec. ITU-T H.264 | ISO/IEC 14496-10
279  * @GST_MPEGTS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM: MVC video sub-bitstream
280  * of an AVC video stream conforming to one or more profiles defined in Annex H
281  * of Rec. ITU-T H.264 | ISO/IEC 14496-10
282  * @GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K: Video stream conforming to one or more
283  * profiles as defined in Rec. ITU-T T.800 | ISO/IEC 15444-1
284  * @GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW: Additional view
285  * Rec. ITU-T H.262 | ISO/IEC 13818-2 video stream for service-compatible
286  * stereoscopic 3D services
287  * @GST_MPEGTS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW: Additional view
288  * Rec. ITU-T H.264 | ISO/IEC 14496-10 video stream conforming to one or more
289  * profiles defined in Annex A for service-compatible stereoscopic 3D services
290  * @GST_MPEGTS_STREAM_TYPE_IPMP_STREAM: IPMP stream
291  *
292  * Type of mpeg-ts stream type.
293  *
294  * These values correspond to the base standard registered types. Depending
295  * on the variant of mpeg-ts being used (Bluray, ATSC, DVB, ...), other
296  * types might also be used, but will not conflict with these.
297  *
298  * Corresponds to table 2-34 of ITU H.222.0 | ISO/IEC 13818-1
299  */
300 typedef enum {
301   GST_MPEGTS_STREAM_TYPE_RESERVED_00                  = 0x00,
302   GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1                  = 0x01,
303   GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2                  = 0x02,
304   GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG1                  = 0x03,
305   GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG2                  = 0x04,
306   GST_MPEGTS_STREAM_TYPE_PRIVATE_SECTIONS             = 0x05,
307   GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS          = 0x06,
308   GST_MPEGTS_STREAM_TYPE_MHEG                         = 0x07,
309   GST_MPEGTS_STREAM_TYPE_DSM_CC                       = 0x08,
310   GST_MPEGTS_STREAM_TYPE_H_222_1                      = 0x09,
311   GST_MPEGTS_STREAM_TYPE_DSMCC_A                      = 0x0a,
312   GST_MPEGTS_STREAM_TYPE_DSMCC_B                      = 0x0b,
313   GST_MPEGTS_STREAM_TYPE_DSMCC_C                      = 0x0c,
314   GST_MPEGTS_STREAM_TYPE_DSMCC_D                      = 0x0d,
315   GST_MPEGTS_STREAM_TYPE_AUXILIARY                    = 0x0e,
316   GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS               = 0x0f,
317   GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG4                  = 0x10,
318   GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_LATM               = 0x11,
319   GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS       = 0x12,
320   GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_SECTIONS          = 0x13,
321   GST_MPEGTS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD        = 0x14,
322   GST_MPEGTS_STREAM_TYPE_METADATA_PES_PACKETS         = 0x15,
323   GST_MPEGTS_STREAM_TYPE_METADATA_SECTIONS            = 0x16,
324   GST_MPEGTS_STREAM_TYPE_METADATA_DATA_CAROUSEL       = 0x17,
325   GST_MPEGTS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL     = 0x18,
326   GST_MPEGTS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD  = 0x19,
327   GST_MPEGTS_STREAM_TYPE_MPEG2_IPMP                   = 0x1a,
328   GST_MPEGTS_STREAM_TYPE_VIDEO_H264                   = 0x1b,
329   GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_CLEAN              = 0x1c,
330   GST_MPEGTS_STREAM_TYPE_MPEG4_TIMED_TEXT             = 0x1d,
331   GST_MPEGTS_STREAM_TYPE_VIDEO_RVC                    = 0x1e,
332   GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM = 0x1f,
333   GST_MPEGTS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM = 0x20,
334   GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K                   = 0x21,
335   GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW = 0x22,
336   GST_MPEGTS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW  = 0x23,
337   GST_MPEGTS_STREAM_TYPE_VIDEO_HEVC                   = 0x24,
338   /* 0x24 - 0x7e : Rec. ITU-T H.222.0 | ISO/IEC 13818-1 Reserved */
339   GST_MPEGTS_STREAM_TYPE_IPMP_STREAM                  = 0x7f
340   /* 0x80 - 0xff : User Private (or defined in other specs) */
341 } GstMpegtsStreamType;
342 
343 /**
344  * GstMpegtsPMTStream:
345  * @stream_type: the type of stream. See #GstMpegtsStreamType
346  * @pid: the PID of the stream
347  * @descriptors: (element-type GstMpegtsDescriptor): the descriptors of the
348  * stream
349  *
350  * An individual stream definition.
351  */
352 struct _GstMpegtsPMTStream
353 {
354   guint8      stream_type;
355   guint16     pid;
356 
357   GPtrArray  *descriptors;
358 };
359 
360 /**
361  * GstMpegtsPMT:
362  * @pcr_pid: PID of the stream containing PCR
363  * @descriptors: (element-type GstMpegtsDescriptor): array of #GstMpegtsDescriptor
364  * @streams: (element-type GstMpegtsPMTStream): Array of #GstMpegtsPMTStream
365  *
366  * Program Map Table (ISO/IEC 13818-1).
367  *
368  * The program_number is contained in the subtable_extension field of the
369  * container #GstMpegtsSection.
370  */
371 struct _GstMpegtsPMT
372 {
373   guint16    pcr_pid;
374   guint16    program_number;
375 
376   GPtrArray *descriptors;
377   GPtrArray *streams;
378 };
379 
380 GST_MPEGTS_API
381 GType gst_mpegts_pmt_get_type (void);
382 
383 GST_MPEGTS_API
384 GType gst_mpegts_pmt_stream_get_type (void);
385 
386 GST_MPEGTS_API
387 GstMpegtsPMT *gst_mpegts_pmt_new (void);
388 
389 GST_MPEGTS_API
390 GstMpegtsPMTStream *gst_mpegts_pmt_stream_new (void);
391 
392 GST_MPEGTS_API
393 const GstMpegtsPMT *gst_mpegts_section_get_pmt (GstMpegtsSection *section);
394 
395 GST_MPEGTS_API
396 GstMpegtsSection *gst_mpegts_section_from_pmt (GstMpegtsPMT *pmt, guint16 pid);
397 
398 /* TSDT */
399 
400 GST_MPEGTS_API
401 GPtrArray *gst_mpegts_section_get_tsdt (GstMpegtsSection *section);
402 
403 
404 /* generic */
405 
406 #define gst_mpegts_section_ref(section)   ((GstMpegtsSection*) gst_mini_object_ref (GST_MINI_OBJECT_CAST (section)))
407 #define gst_mpegts_section_unref(section) (gst_mini_object_unref (GST_MINI_OBJECT_CAST (section)))
408 
409 GST_MPEGTS_API
410 GstMessage *gst_message_new_mpegts_section (GstObject *parent, GstMpegtsSection *section);
411 
412 GST_MPEGTS_API
413 gboolean gst_mpegts_section_send_event (GstMpegtsSection * section, GstElement * element);
414 
415 GST_MPEGTS_API
416 GstMpegtsSection *gst_event_parse_mpegts_section (GstEvent * event);
417 
418 GST_MPEGTS_API
419 GstMpegtsSection *gst_message_parse_mpegts_section (GstMessage *message);
420 
421 GST_MPEGTS_API
422 GstMpegtsSection *gst_mpegts_section_new (guint16 pid,
423 					   guint8 * data,
424 					   gsize data_size);
425 
426 GST_MPEGTS_API
427 guint8 *gst_mpegts_section_packetize (GstMpegtsSection * section, gsize * output_size);
428 
429 G_END_DECLS
430 
431 #endif				/* GST_MPEGTS_SECTION_H */
432