2 * GPAC - Multimedia Framework C SDK
\r
4 * Authors: Walid B.H - Jean Le Feuvre
\r
5 * Copyright (c)2006-200X ENST - All rights reserved
\r
7 * This file is part of GPAC / MPEG2-TS sub-project
\r
9 * GPAC is free software; you can redistribute it and/or modify
\r
10 * it under the terms of the GNU Lesser General Public License as published by
\r
11 * the Free Software Foundation; either version 2, or (at your option)
\r
12 * any later version.
\r
14 * GPAC is distributed in the hope that it will be useful,
\r
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
17 * GNU Lesser General Public License for more details.
\r
19 * You should have received a copy of the GNU Lesser General Public
\r
20 * License along with this library; see the file COPYING. If not, write to
\r
21 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
\r
26 #ifndef _GF_MPEG_TS_H_
\r
27 #define _GF_MPEG_TS_H_
\r
29 #include <gpac/list.h>
\r
30 #include <gpac/internal/odf_dev.h>
\r
32 typedef struct tag_m2ts_demux GF_M2TS_Demuxer;
\r
33 typedef struct tag_m2ts_es GF_M2TS_ES;
\r
34 typedef struct tag_m2ts_section_es GF_M2TS_SECTION_ES;
\r
36 /*Maximum number of streams in a TS*/
\r
37 #define GF_M2TS_MAX_STREAMS 8192
\r
39 /*MPEG-2 TS Media types*/
\r
42 GF_M2TS_VIDEO_MPEG1 = 0x01,
\r
43 GF_M2TS_VIDEO_MPEG2 = 0x02,
\r
44 GF_M2TS_AUDIO_MPEG1 = 0x03,
\r
45 GF_M2TS_AUDIO_MPEG2 = 0x04,
\r
46 GF_M2TS_PRIVATE_SECTION = 0x05,
\r
47 GF_M2TS_PRIVATE_DATA = 0x06,
\r
48 GF_M2TS_AUDIO_AAC = 0x0F,
\r
49 GF_M2TS_VIDEO_MPEG4 = 0x10,
\r
50 GF_M2TS_AUDIO_LATM_AAC = 0x11,
\r
52 GF_M2TS_SYSTEMS_MPEG4_PES = 0x12,
\r
53 GF_M2TS_SYSTEMS_MPEG4_SECTIONS = 0x13,
\r
55 GF_M2TS_VIDEO_H264 = 0x1B,
\r
57 GF_M2TS_AUDIO_AC3 = 0x81,
\r
58 GF_M2TS_AUDIO_DTS = 0x8A,
\r
59 GF_M2TS_SUBTITLE_DVB = 0x100,
\r
61 /*returns readable name for given stream type*/
\r
62 const char *gf_m2ts_get_stream_name(u32 streamType);
\r
64 /*PES data framing modes*/
\r
67 /*use data framing: recompute start of AUs (data frames)*/
\r
68 GF_M2TS_PES_FRAMING_DEFAULT,
\r
69 /*don't use data framing: all packets are raw PES packets*/
\r
70 GF_M2TS_PES_FRAMING_RAW,
\r
71 /*skip pes processing: all transport packets related to this stream are discarded*/
\r
72 GF_M2TS_PES_FRAMING_SKIP
\r
75 /*PES packet flags*/
\r
78 GF_M2TS_PES_PCK_RAP = 1,
\r
79 GF_M2TS_PES_PCK_AU_START = 1<<1,
\r
80 /*visual frame starting in this packet is an I frame or IDR (AVC/H264)*/
\r
81 GF_M2TS_PES_PCK_I_FRAME = 1<<2,
\r
82 /*visual frame starting in this packet is a P frame*/
\r
83 GF_M2TS_PES_PCK_P_FRAME = 1<<3,
\r
84 /*visual frame starting in this packet is a B frame*/
\r
85 GF_M2TS_PES_PCK_B_FRAME = 1<<4
\r
88 /*Events used by the MPEGTS demuxer*/
\r
91 /*PAT has been found (service connection) - no assoctiated parameter*/
\r
92 GF_M2TS_EVT_PAT_FOUND = 0,
\r
93 /*PAT has been updated - no assoctiated parameter*/
\r
94 GF_M2TS_EVT_PAT_UPDATE,
\r
95 /*repeated PAT has been found (carousel) - no assoctiated parameter*/
\r
96 GF_M2TS_EVT_PAT_REPEAT,
\r
97 /*PMT has been found (service tune-in) - assoctiated parameter: new PMT*/
\r
98 GF_M2TS_EVT_PMT_FOUND,
\r
99 /*repeated PMT has been found (carousel) - assoctiated parameter: updated PMT*/
\r
100 GF_M2TS_EVT_PMT_REPEAT,
\r
101 /*PMT has been changed - assoctiated parameter: updated PMT*/
\r
102 GF_M2TS_EVT_PMT_UPDATE,
\r
103 /*SDT has been received - assoctiated parameter: none*/
\r
104 GF_M2TS_EVT_SDT_FOUND,
\r
105 /*repeated SDT has been found (carousel) - assoctiated parameter: none*/
\r
106 GF_M2TS_EVT_SDT_REPEAT,
\r
107 /*SDT has been received - assoctiated parameter: none*/
\r
108 GF_M2TS_EVT_SDT_UPDATE,
\r
109 /*INT has been received - assoctiated parameter: none*/
\r
110 GF_M2TS_EVT_INT_FOUND,
\r
111 /*repeated INT has been found (carousel) - assoctiated parameter: none*/
\r
112 GF_M2TS_EVT_INT_REPEAT,
\r
113 /*INT has been received - assoctiated parameter: none*/
\r
114 GF_M2TS_EVT_INT_UPDATE,
\r
115 /*PES packet has been received - assoctiated parameter: PES packet*/
\r
116 GF_M2TS_EVT_PES_PCK,
\r
117 /*PCR has been received - assoctiated parameter: PES packet with no data*/
\r
118 GF_M2TS_EVT_PES_PCR,
\r
119 /*An MPEG-4 SL Packet has been received in a section - assoctiated parameter: SL packet */
\r
120 GF_M2TS_EVT_SL_PCK,
\r
121 /*An IP datagram has been received in a section - assoctiated parameter: IP datagram */
\r
122 GF_M2TS_EVT_IP_DATAGRAM,
\r
124 /*AAC config has been extracted - associated parameter: PES Packet with encoded M4ADecSpecInfo in its data
\r
125 THIS MUST BE CLEANED UP
\r
127 GF_M2TS_EVT_AAC_CFG,
\r
129 /* An EIT message for the present or following event on this TS has been received */
\r
130 GF_M2TS_EVT_EIT_ACTUAL_PF,
\r
131 /* An EIT message for the schedule of this TS has been received */
\r
132 GF_M2TS_EVT_EIT_ACTUAL_SCHEDULE,
\r
133 /* An EIT message for the present or following event of an other TS has been received */
\r
134 GF_M2TS_EVT_EIT_OTHER_PF,
\r
135 /* An EIT message for the schedule of an other TS has been received */
\r
136 GF_M2TS_EVT_EIT_OTHER_SCHEDULE,
\r
137 /* A message to inform about the current date and time in the TS */
\r
139 /* A message to inform about the current time offset in the TS */
\r
142 /* A generic event message for EIT, TDT, TOT etc */
\r
143 GF_M2TS_EVT_DVB_GENERAL,
\r
148 GF_M2TS_TABLE_START = 1,
\r
149 GF_M2TS_TABLE_END = 1<<1,
\r
150 GF_M2TS_TABLE_FOUND = 1<<2,
\r
151 GF_M2TS_TABLE_UPDATE = 1<<3,
\r
152 GF_M2TS_TABLE_REPEAT = 1<<4,
\r
155 typedef void (*gf_m2ts_section_callback)(GF_M2TS_Demuxer *ts, GF_M2TS_SECTION_ES *es, GF_List *sections, u8 table_id, u16 ex_table_id, u8 version_number, u8 last_section_number, u32 status);
\r
157 typedef struct __m2ts_demux_section
\r
159 unsigned char *data;
\r
163 typedef struct __m2ts_demux_table
\r
165 struct __m2ts_demux_table *next;
\r
173 /*reassembler state*/
\r
175 u8 last_version_number;
\r
177 u8 current_next_indicator;
\r
180 u8 last_section_number;
\r
187 typedef struct GF_M2TS_SectionFilter
\r
189 /*section reassembler*/
\r
191 /*section buffer (max 4096)*/
\r
193 /*current section length as indicated in section header*/
\r
195 /*number of bytes received from current section*/
\r
197 /*error indiator when reaggregating sections*/
\r
200 /*section->table aggregator*/
\r
201 GF_M2TS_Table *table;
\r
203 /* indicates that the section and last_section_number do not need to be checked */
\r
204 Bool process_individual;
\r
206 /* indicates that the section header with table id and extended table id ... is
\r
207 not parsed by the TS demuxer and left for the application */
\r
208 Bool direct_dispatch;
\r
210 gf_m2ts_section_callback process_section;
\r
211 } GF_M2TS_SectionFilter;
\r
215 /*MPEG-2 TS program object*/
\r
223 GF_InitialObjectDescriptor *pmt_iod;
\r
225 /*list of additional ODs found per program !! used by media importer only , refine this !!
\r
226 this list is only created when MPEG-4 over MPEG-2 is detected
\r
227 the list AND the ODs contained in it are destroyed when destroying the demuxer
\r
229 GF_List *additional_ods;
\r
230 /*first dts found on this program - this is used by parsers, but not setup by the lib*/
\r
237 /*ES is a section stream*/
\r
238 GF_M2TS_ES_IS_SECTION = 1,
\r
239 /*ES is an mpeg-4 flexmux stream*/
\r
240 GF_M2TS_ES_IS_FMC = 1<<1,
\r
241 /*ES is an mpeg-4 SL-packetized stream*/
\r
242 GF_M2TS_ES_IS_SL = 1<<2,
\r
243 /*ES is an mpeg-4 Object Descriptor SL-packetized stream*/
\r
244 GF_M2TS_ES_IS_MPEG4_OD = 1<<3,
\r
246 /*all flags above this mask are used by importers & co*/
\r
247 GF_M2TS_ES_STATIC_FLAGS_MASK = 0x0000FFFF,
\r
249 /*Flag used by importers*/
\r
250 GF_M2TS_ES_FIRST_DTS = 1<<20,
\r
253 /*Abstract Section/PES stream object, only used for type casting*/
\r
254 #define ABSTRACT_ES \
\r
255 GF_M2TS_Program *program; \
\r
274 struct tag_m2ts_section_es
\r
277 GF_M2TS_SectionFilter *sec;
\r
279 /* MPE Frame object, MPE-FEC related data */
\r
280 GF_M2TS_INT *ip_mac_not_table;
\r
283 /*******************************************************************************/
\r
284 typedef struct tag_m2ts_dvb_sub
\r
288 u16 composition_page_id;
\r
289 u16 ancillary_page_id;
\r
290 } GF_M2TS_DVB_Subtitling_Descriptor;
\r
292 typedef struct tag_m2ts_dvb_teletext
\r
296 u8 magazine_number;
\r
298 } GF_M2TS_DVB_Teletext_Descriptor;
\r
300 /*MPEG-2 TS ES object*/
\r
301 typedef struct tag_m2ts_pes
\r
307 u32 vid_w, vid_h, vid_par, aud_sr, aud_nb_ch;
\r
311 /*mpegts lib private - do not touch :)*/
\r
312 /*PES re-assembler*/
\r
313 unsigned char *data;
\r
314 u32 data_len, pes_len;
\r
318 /*PES reframer - if NULL, pes processing is skiped*/
\r
320 void (*reframe)(struct tag_m2ts_demux *ts, struct tag_m2ts_pes *pes, u64 DTS, u64 CTS, unsigned char *data, u32 data_len);
\r
321 /*LATM stuff - should be moved out of mpegts*/
\r
322 unsigned char *buf;
\r
325 GF_M2TS_DVB_Subtitling_Descriptor sub;
\r
329 /*SDT information object*/
\r
332 u16 original_network_id;
\r
333 u16 transport_stream_id;
\r
336 u32 EIT_present_following;
\r
337 u32 running_status;
\r
340 unsigned char *provider, *service;
\r
346 unsigned char *network_name;
\r
347 u16 original_network_id;
\r
348 u16 transport_stream_id;
\r
351 u32 logical_channel_number;
\r
354 #define GF_M2TS_BASE_DESCRIPTOR u32 tag;
\r
357 u8 content_nibble_level_1, content_nibble_level_2, user_nibble;
\r
358 } GF_M2TS_DVB_Content_Descriptor;
\r
361 char country_code[3];
\r
363 } GF_M2TS_DVB_Rating_Descriptor;
\r
366 unsigned char lang[3];
\r
367 unsigned char *event_name, *event_text;
\r
368 } GF_M2TS_DVB_Short_Event_Descriptor;
\r
371 unsigned char *item;
\r
372 unsigned char *description;
\r
373 } GF_M2TS_DVB_Extended_Event_Item;
\r
376 unsigned char lang[3];
\r
379 unsigned char *text;
\r
380 } GF_M2TS_DVB_Extended_Event_Descriptor;
\r
382 /*EIT information objects*/
\r
385 u32 year, month, day, time;
\r
387 /* local time offset descriptor data */
\r
388 char country_code[3];
\r
389 u8 country_region_id;
\r
390 u8 local_time_offset_polarity;
\r
391 u16 local_time_offset;
\r
393 u32 toc_year, toc_month, toc_day, toc_time;
\r
394 u16 next_time_offset;
\r
395 } GF_M2TS_DateTime_Event;
\r
401 char language_code[3];
\r
402 unsigned char *text;
\r
403 } GF_M2TS_Component;
\r
408 GF_M2TS_DateTime_Event start;
\r
412 GF_List *short_events;
\r
413 GF_List *extended_events;
\r
414 GF_List *components;
\r
417 } GF_M2TS_EIT_Event;
\r
421 u32 original_network_id;
\r
422 u32 transport_stream_id;
\r
427 void gf_m2ts_decode_mjd_date(u32 date, u32 *year, u32 *month, u32 *day);
\r
430 /*MPEG-2 TS packet*/
\r
438 GF_M2TS_PES *stream;
\r
441 /*MPEG-4 SL packet from MPEG-2 TS*/
\r
447 GF_M2TS_ES *stream;
\r
450 /*MPEG-2 TS demuxer*/
\r
451 struct tag_m2ts_demux
\r
453 GF_M2TS_ES *ess[GF_M2TS_MAX_STREAMS];
\r
455 /*keep it seperate for now - TODO check if we're sure of the order*/
\r
458 /*user callback - MUST NOT BE NULL*/
\r
459 void (*on_event)(struct tag_m2ts_demux *ts, u32 evt_type, void *par);
\r
460 /*private user data*/
\r
463 /*private resync buffer*/
\r
465 u32 buffer_size, alloc_size;
\r
466 /*default transport PID filters*/
\r
467 GF_M2TS_SectionFilter *pat, *nit, *sdt, *eit, *tdt_tot_st;
\r
469 /* Structure to hold all the INT tables if the TS contains IP streams */
\r
470 GF_List *ip_mac_not_tables;
\r
480 GF_M2TS_Demuxer *gf_m2ts_demux_new();
\r
481 void gf_m2ts_demux_del(GF_M2TS_Demuxer *ts);
\r
482 void gf_m2ts_reset_parsers(GF_M2TS_Demuxer *ts);
\r
483 GF_Err gf_m2ts_set_pes_framing(GF_M2TS_PES *pes, u32 mode);
\r
484 GF_Err gf_m2ts_process_data(GF_M2TS_Demuxer *ts, char *data, u32 data_size);
\r
486 u32 gf_m2ts_crc32_check(char *data, u32 len);
\r
488 /*MPEG-2 Descriptor tags*/
\r
492 GF_M2TS_VIDEO_STREAM_DESCRIPTOR = 0x02,
\r
493 GF_M2TS_AUDIO_STREAM_DESCRIPTOR = 0x03,
\r
494 GF_M2TS_HIERARCHY_DESCRIPTOR = 0x04,
\r
495 GF_M2TS_REGISTRATION_DESCRIPTOR = 0x05,
\r
496 GF_M2TS_DATA_STREAM_ALIGNEMENT_DESCRIPTOR = 0x06,
\r
497 GF_M2TS_TARGET_BACKGROUND_GRID_DESCRIPTOR = 0x07,
\r
498 GF_M2TS_VIEW_WINDOW_DESCRIPTOR = 0x08,
\r
499 GF_M2TS_CA_DESCRIPTOR = 0x09,
\r
500 GF_M2TS_ISO_639_LANGUAGE_DESCRIPTOR = 0x0A,
\r
502 GF_M2TS_STD_DESCRIPTOR = 0x17,
\r
504 GF_M2TS_MPEG4_VIDEO_DESCRIPTOR = 0x1B,
\r
505 GF_M2TS_MPEG4_AUDIO_DESCRIPTOR = 0x1C,
\r
506 GF_M2TS_MPEG4_IOD_DESCRIPTOR = 0x1D,
\r
507 GF_M2TS_MPEG4_SL_DESCRIPTOR = 0x1E,
\r
508 GF_M2TS_MPEG4_FMC_DESCRIPTOR = 0x1F,
\r
510 GF_M2TS_AVC_VIDEO_DESCRIPTOR = 0x28,
\r
512 GF_M2TS_AVC_TIMING_HRD_DESCRIPTOR = 0x2A,
\r
515 /* 0x2D - 0x3F - ISO/IEC 13818-6 values */
\r
516 /* 0x40 - 0xFF - User Private values */
\r
517 GF_M2TS_DVB_NETWORK_NAME_DESCRIPTOR = 0x40,
\r
518 GF_M2TS_DVB_SERVICE_LIST_DESCRIPTOR = 0x41,
\r
519 GF_M2TS_DVB_STUFFING_DESCRIPTOR = 0x42,
\r
520 GF_M2TS_DVB_SAT_DELIVERY_SYSTEM_DESCRIPTOR = 0x43,
\r
521 GF_M2TS_DVB_CABLE_DELIVERY_SYSTEM_DESCRIPTOR = 0x44,
\r
522 GF_M2TS_DVB_VBI_DATA_DESCRIPTOR = 0x45,
\r
523 GF_M2TS_DVB_VBI_TELETEXT_DESCRIPTOR = 0x46,
\r
524 GF_M2TS_DVB_BOUQUET_NAME_DESCRIPTOR = 0x47,
\r
525 GF_M2TS_DVB_SERVICE_DESCRIPTOR = 0x48,
\r
526 GF_M2TS_DVB_COUNTRY_AVAILABILITY_DESCRIPTOR = 0x49,
\r
527 GF_M2TS_DVB_LINKAGE_DESCRIPTOR = 0x4A,
\r
528 GF_M2TS_DVB_NVOD_REFERENCE_DESCRIPTOR = 0x4B,
\r
529 GF_M2TS_DVB_TIME_SHIFTED_SERVICE_DESCRIPTOR = 0x4C,
\r
530 GF_M2TS_DVB_SHORT_EVENT_DESCRIPTOR = 0x4D,
\r
531 GF_M2TS_DVB_EXTENDED_EVENT_DESCRIPTOR = 0x4E,
\r
532 GF_M2TS_DVB_TIME_SHIFTED_EVENT_DESCRIPTOR = 0x4F,
\r
533 GF_M2TS_DVB_COMPONENT_DESCRIPTOR = 0x50,
\r
534 GF_M2TS_DVB_MOSAIC_DESCRIPTOR = 0x51,
\r
535 GF_M2TS_DVB_STREAM_IDENTIFIER_DESCRIPTOR = 0x52,
\r
536 GF_M2TS_DVB_CA_IDENTIFIER_DESCRIPTOR = 0x53,
\r
537 GF_M2TS_DVB_CONTENT_DESCRIPTOR = 0x54,
\r
538 GF_M2TS_DVB_PARENTAL_RATING_DESCRIPTOR = 0x55,
\r
539 GF_M2TS_DVB_TELETEXT_DESCRIPTOR = 0x56,
\r
541 GF_M2TS_DVB_LOCAL_TIME_OFFSET_DESCRIPTOR = 0x58,
\r
542 GF_M2TS_DVB_SUBTITLING_DESCRIPTOR = 0x59,
\r
544 GF_M2TS_DVB_DATA_BROADCAST_DESCRIPTOR = 0x64,
\r
546 GF_M2TS_DVB_DATA_BROADCAST_ID_DESCRIPTOR = 0x66,
\r
548 GF_M2TS_DVB_AC3_DESCRIPTOR = 0x6A,
\r
552 /* Reserved PID values */
\r
554 GF_M2TS_PID_PAT = 0x0000,
\r
555 GF_M2TS_PID_CAT = 0x0001,
\r
556 GF_M2TS_PID_TSDT = 0x0002,
\r
557 /* reserved 0x0003 to 0x000F */
\r
558 GF_M2TS_PID_NIT_ST = 0x0010,
\r
559 GF_M2TS_PID_SDT_BAT_ST = 0x0011,
\r
560 GF_M2TS_PID_EIT_ST_CIT = 0x0012,
\r
561 GF_M2TS_PID_RST_ST = 0x0013,
\r
562 GF_M2TS_PID_TDT_TOT_ST = 0x0014,
\r
563 GF_M2TS_PID_NET_SYNC = 0x0015,
\r
564 GF_M2TS_PID_RNT = 0x0016,
\r
565 /* reserved 0x0017 to 0x001B */
\r
566 GF_M2TS_PID_IN_SIG = 0x001C,
\r
567 GF_M2TS_PID_MEAS = 0x001D,
\r
568 GF_M2TS_PID_DIT = 0x001E,
\r
569 GF_M2TS_PID_SIT = 0x001F
\r
572 /* max size includes first header, second header, payload and CRC */
\r
574 GF_M2TS_TABLE_ID_PAT = 0x00,
\r
575 GF_M2TS_TABLE_ID_CAT = 0x01,
\r
576 GF_M2TS_TABLE_ID_PMT = 0x02,
\r
577 GF_M2TS_TABLE_ID_TSDT = 0x03, /* max size for section 1024 */
\r
578 GF_M2TS_TABLE_ID_MPEG4_BIFS = 0x04, /* max size for section 4096 */
\r
579 GF_M2TS_TABLE_ID_MPEG4_OD = 0x05, /* max size for section 4096 */
\r
580 GF_M2TS_TABLE_ID_METADATA = 0x06,
\r
581 GF_M2TS_TABLE_ID_IPMP_CONTROL = 0x07,
\r
582 /* 0x08 - 0x37 reserved */
\r
583 /* 0x38 - 0x3D DSM-CC defined */
\r
584 GF_M2TS_TABLE_ID_DSM_CC_PRIVATE = 0x3E, /* used for MPE (only, not MPE-FEC) */
\r
585 /* 0x3F DSM-CC defined */
\r
586 GF_M2TS_TABLE_ID_NIT_ACTUAL = 0x40, /* max size for section 1024 */
\r
587 GF_M2TS_TABLE_ID_NIT_OTHER = 0x41,
\r
588 GF_M2TS_TABLE_ID_SDT_ACTUAL = 0x42, /* max size for section 1024 */
\r
589 /* 0x43 - 0x45 reserved */
\r
590 GF_M2TS_TABLE_ID_SDT_OTHER = 0x46, /* max size for section 1024 */
\r
591 /* 0x47 - 0x49 reserved */
\r
592 GF_M2TS_TABLE_ID_BAT = 0x4a, /* max size for section 1024 */
\r
593 /* 0x4b - 0x4d reserved */
\r
594 GF_M2TS_TABLE_ID_EIT_ACTUAL_PF = 0x4E, /* max size for section 4096 */
\r
595 GF_M2TS_TABLE_ID_EIT_OTHER_PF = 0x4F,
\r
596 /* 0x50 - 0x6f EIT SCHEDULE */
\r
597 GF_M2TS_TABLE_ID_EIT_SCHEDULE_MIN = 0x50,
\r
598 GF_M2TS_TABLE_ID_EIT_SCHEDULE_ACTUAL_MAX= 0x5F,
\r
599 GF_M2TS_TABLE_ID_EIT_SCHEDULE_MAX = 0x6F,
\r
601 GF_M2TS_TABLE_ID_TDT = 0x70,
\r
602 GF_M2TS_TABLE_ID_RST = 0x71, /* max size for section 1024 */
\r
603 GF_M2TS_TABLE_ID_ST = 0x72, /* max size for section 4096 */
\r
604 GF_M2TS_TABLE_ID_TOT = 0x73,
\r
605 GF_M2TS_TABLE_ID_AI = 0x74,
\r
606 GF_M2TS_TABLE_ID_CONT = 0x75,
\r
607 GF_M2TS_TABLE_ID_RC = 0x76,
\r
608 GF_M2TS_TABLE_ID_CID = 0x77,
\r
609 GF_M2TS_TABLE_ID_MPE_FEC = 0x78,
\r
610 GF_M2TS_TABLE_ID_RES_NOT = 0x79,
\r
611 /* 0x7A - 0x7D reserved */
\r
612 GF_M2TS_TABLE_ID_DIT = 0x7E,
\r
613 GF_M2TS_TABLE_ID_SIT = 0x7F, /* max size for section 4096 */
\r
614 /* 0x80 - 0xfe reserved */
\r
615 /* 0xff reserved */
\r
619 M2TS_ADAPTATION_RESERVED = 0,
\r
620 M2TS_ADAPTATION_NONE = 1,
\r
621 M2TS_ADAPTATION_ONLY = 2,
\r
622 M2TS_ADAPTATION_AND_PAYLOAD = 3,
\r
626 #define SECTION_HEADER_LENGTH 3 /* header till the last bit of the section_length field */
\r
627 #define SECTION_ADDITIONAL_HEADER_LENGTH 5 /* header from the last bit of the section_length field to the payload */
\r
628 #define CRC_LENGTH 4
\r
637 u8 scrambling_ctrl;
\r
638 u8 adaptation_field;
\r
639 u8 continuity_counter;
\r
644 u32 discontinuity_indicator;
\r
645 u32 random_access_indicator;
\r
646 u32 priority_indicator;
\r
649 u64 PCR_base, PCR_ext;
\r
652 u64 OPCR_base, OPCR_ext;
\r
654 u32 splicing_point_flag;
\r
655 u32 transport_private_data_flag;
\r
656 u32 adaptation_field_extension_flag;
\r
658 u32 splice_countdown;
\r
659 u32 transport_private_data_length;
\r
660 u32 adaptation_field_extension_length;
\r
662 u32 piecewise_rate_flag;
\r
663 u32 seamless_splice_flag;
\r
664 u32 ltw_valid_flag;
\r
666 u32 piecewise_rate;
\r
670 } GF_M2TS_AdaptationField;
\r
679 } GF_M2TS_PESHeader;
\r
681 #endif //_GF_MPEG_TS_H_
\r