123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 |
- /*
- * mpegtspacketizer.h -
- * Copyright (C) 2013 Edward Hervey
- *
- * Authors:
- * Edward Hervey <[email protected]>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
- #ifndef GST_MPEGTS_SECTION_H
- #define GST_MPEGTS_SECTION_H
- #include <gst/gst.h>
- #include <gst/mpegts/gstmpegtsdescriptor.h>
- G_BEGIN_DECLS
- typedef struct _GstMpegtsSection GstMpegtsSection;
- #define GST_TYPE_MPEGTS_SECTION (gst_mpegts_section_get_type())
- #define GST_MPEGTS_SECTION(section) ((GstMpegtsSection*) section)
- #define GST_MPEGTS_SECTION_TYPE(section) (GST_MPEGTS_SECTION (section)->section_type)
- GType gst_mpegts_section_get_type (void);
- /**
- * GstMpegtsSectionType:
- * @GST_MPEGTS_SECTION_UNKNOWN: Unknown section type
- * @GST_MPEGTS_SECTION_PAT: Program Association Table (ISO/IEC 13818-1)
- * @GST_MPEGTS_SECTION_PMT: Program Map Table (ISO/IEC 13818-1)
- * @GST_MPEGTS_SECTION_CAT: Conditional Access Table (ISO/IEC 13818-1)
- * @GST_MPEGTS_SECTION_TSDT: Transport Stream Description Table (ISO/IEC 13818-1)
- * @GST_MPEGTS_SECTION_EIT: Event Information Table (EN 300 468)
- * @GST_MPEGTS_SECTION_NIT: Network Information Table (ISO/IEC 13818-1 / EN 300 468)
- * @GST_MPEGTS_SECTION_BAT: Bouquet Association Table ((EN 300 468)
- * @GST_MPEGTS_SECTION_SDT: Service Description Table (EN 300 468)
- * @GST_MPEGTS_SECTION_TDT: Time and Date Table (EN 300 468)
- * @GST_MPEGTS_SECTION_TOT: Time Offset Table (EN 300 468)
- * @GST_MPEGTS_SECTION_ATSC_TVCT: ATSC Terrestrial Virtual Channel Table (A65)
- * @GST_MPEGTS_SECTION_ATSC_CVCT: ATSC Cable Virtual Channel Table (A65)
- * @GST_MPEGTS_SECTION_ATSC_MGT: ATSC Master Guide Table (A65)
- * @GST_MPEGTS_SECTION_ATSC_ETT: ATSC Extended Text Table (A65)
- * @GST_MPEGTS_SECTION_ATSC_EIT: ATSC Event Information Table (A65)
- * @GST_MPEGTS_SECTION_ATSC_STT: ATSC System Time Table (A65)
- *
- * Types of #GstMpegtsSection that the library handles.
- */
- typedef enum {
- GST_MPEGTS_SECTION_UNKNOWN = 0,
- GST_MPEGTS_SECTION_PAT,
- GST_MPEGTS_SECTION_PMT,
- GST_MPEGTS_SECTION_CAT,
- GST_MPEGTS_SECTION_TSDT,
- GST_MPEGTS_SECTION_EIT,
- GST_MPEGTS_SECTION_NIT,
- GST_MPEGTS_SECTION_BAT,
- GST_MPEGTS_SECTION_SDT,
- GST_MPEGTS_SECTION_TDT,
- GST_MPEGTS_SECTION_TOT,
- GST_MPEGTS_SECTION_ATSC_TVCT,
- GST_MPEGTS_SECTION_ATSC_CVCT,
- GST_MPEGTS_SECTION_ATSC_MGT,
- GST_MPEGTS_SECTION_ATSC_ETT,
- GST_MPEGTS_SECTION_ATSC_EIT,
- GST_MPEGTS_SECTION_ATSC_STT
- } GstMpegtsSectionType;
- /**
- * GstMpegtsSectionTableID:
- *
- * Values for a #GstMpegtsSection table_id
- *
- * These are the registered ITU H.222.0 | ISO/IEC 13818-1 table_id variants.
- *
- * see also #GstMpegtsSectionATSCTableID, #GstMpegtsSectionDVBTableID, and
- * #GstMpegtsSectionSCTETableID
- */
- typedef enum {
- /* ITU H.222.0 / IEC 13818-1 */
- GST_MTS_TABLE_ID_PROGRAM_ASSOCIATION = 0x00,
- GST_MTS_TABLE_ID_CONDITIONAL_ACCESS = 0x01,
- GST_MTS_TABLE_ID_TS_PROGRAM_MAP = 0x02,
- GST_MTS_TABLE_ID_TS_DESCRIPTION = 0x03,
- GST_MTS_TABLE_ID_14496_SCENE_DESCRIPTION = 0x04,
- GST_MTS_TABLE_ID_14496_OBJET_DESCRIPTOR = 0x05,
- GST_MTS_TABLE_ID_METADATA = 0x06,
- GST_MTS_TABLE_ID_IPMP_CONTROL_INFORMATION = 0x07,
- /* 0x08 - 0x39 : ITU H.222.0 | ISO/IEC 13818-1 reserved */
- /* IEC 13818-6 (DSM-CC) */
- GST_MTS_TABLE_ID_DSM_CC_MULTIPROTO_ENCAPSULATED_DATA = 0x3A,
- GST_MTS_TABLE_ID_DSM_CC_U_N_MESSAGES = 0x3B,
- GST_MTS_TABLE_ID_DSM_CC_DOWNLOAD_DATA_MESSAGES = 0x3C,
- GST_MTS_TABLE_ID_DSM_CC_STREAM_DESCRIPTORS = 0x3D,
- GST_MTS_TABLE_ID_DSM_CC_PRIVATE_DATA = 0x3E,
- GST_MTS_TABLE_ID_DSM_CC_ADDRESSABLE_SECTIONS = 0x3F,
- /* Unset */
- GST_MTS_TABLE_ID_UNSET = 0xFF
-
- } GstMpegtsSectionTableID;
- typedef gboolean (*GstMpegtsPacketizeFunc) (GstMpegtsSection *section);
- /**
- * GstMpegtsSection:
- * @section_type: The type of section
- * @pid: The pid on which this section was found
- * @table_id: The table id of this section
- * @subtable_extension: This meaning differs per section. See the documentation
- * of the parsed section type for the meaning of this field
- * @version_number: Version of the section.
- * @current_next_indicator: Applies to current/next stream or not
- * @section_number: Number of the section (if multiple)
- * @last_section_number: Number of the last expected section (if multiple)
- * @crc: CRC
- *
- * Mpeg-TS Section Information (SI) (ISO/IEC 13818-1)
- */
- struct _GstMpegtsSection
- {
- /*< private >*/
- GstMiniObject parent;
- /*< public >*/
- GstMpegtsSectionType section_type;
- guint16 pid;
- guint8 table_id;
- guint16 subtable_extension;
- guint8 version_number;
- gboolean current_next_indicator;
- guint8 section_number;
- guint8 last_section_number;
- guint32 crc;
- /*< private >*/
- /* data: Points to beginning of section data
- * i.e. the first byte is the table_id field */
- guint8 *data;
- /* section_length: length of data (including final CRC if present) */
- guint section_length;
- /* cached_parsed: cached copy of parsed section */
- gpointer *cached_parsed;
- /* destroy_parsed: function to clear cached_parsed */
- GDestroyNotify destroy_parsed;
- /* offset: offset of the section within the container stream */
- guint64 offset;
- /* short_section: TRUE if section_syntax_indicator == 0
- * FIXME : Maybe make public later on when allowing creation of
- * sections to that people can create private short sections ? */
- gboolean short_section;
- GstMpegtsPacketizeFunc packetizer;
- /* Padding for future extension */
- gpointer _gst_reserved[GST_PADDING];
- };
- GBytes *gst_mpegts_section_get_data (GstMpegtsSection *section);
- /* PAT */
- #define GST_TYPE_MPEGTS_PAT_PROGRAM (gst_mpegts_pat_program_get_type())
- typedef struct _GstMpegtsPatProgram GstMpegtsPatProgram;
- /**
- * GstMpegtsPatProgram:
- * @program_number: the program number
- * @network_or_program_map_PID: the network of program map PID
- *
- * A program entry from a Program Association Table (ITU H.222.0, ISO/IEC 13818-1).
- */
- struct _GstMpegtsPatProgram
- {
- guint16 program_number;
- guint16 network_or_program_map_PID;
- };
- GPtrArray *gst_mpegts_section_get_pat (GstMpegtsSection *section);
- GType gst_mpegts_pat_program_get_type (void);
- GPtrArray *gst_mpegts_pat_new (void);
- GstMpegtsPatProgram *gst_mpegts_pat_program_new (void);
- GstMpegtsSection *gst_mpegts_section_from_pat (GPtrArray * programs,
- guint16 ts_id);
- /* CAT */
- GPtrArray *gst_mpegts_section_get_cat (GstMpegtsSection *section);
- /* PMT */
- typedef struct _GstMpegtsPMTStream GstMpegtsPMTStream;
- typedef struct _GstMpegtsPMT GstMpegtsPMT;
- #define GST_TYPE_MPEGTS_PMT (gst_mpegts_pmt_get_type())
- #define GST_TYPE_MPEGTS_PMT_STREAM (gst_mpegts_pmt_stream_get_type())
- /**
- * GstMpegtsStreamType:
- * @GST_MPEGTS_STREAM_TYPE_RESERVED_00: ITU-T | ISO/IEC Reserved
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1: ISO/IEC 11172-2 Video
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2: Rec. ITU-T H.262 | ISO/IEC 13818-2
- * Video or ISO/IEC 11172-2 constrained parameter video stream
- * @GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG1: ISO/IEC 11172-3 Audio
- * @GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG2: ISO/IEC 13818-3 Audio
- * @GST_MPEGTS_STREAM_TYPE_PRIVATE_SECTIONS: private sections
- * @GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS: PES packets containing private data
- * @GST_MPEGTS_STREAM_TYPE_MHEG: ISO/IEC 13522 MHEG
- * @GST_MPEGTS_STREAM_TYPE_DSM_CC: Annex A DSM-CC
- * @GST_MPEGTS_STREAM_TYPE_H_222_1: Rec. ITU-T H.222.1
- * @GST_MPEGTS_STREAM_TYPE_DSMCC_A: ISO/IEC 13818-6 type A
- * @GST_MPEGTS_STREAM_TYPE_DSMCC_B: ISO/IEC 13818-6 type B
- * @GST_MPEGTS_STREAM_TYPE_DSMCC_C: ISO/IEC 13818-6 type C
- * @GST_MPEGTS_STREAM_TYPE_DSMCC_D: ISO/IEC 13818-6 type D
- * @GST_MPEGTS_STREAM_TYPE_AUXILIARY: auxiliary streams
- * @GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS: ISO/IEC 13818-7 Audio with ADTS
- * transport syntax
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG4: ISO/IEC 14496-2 Visual
- * @GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_LATM: ISO/IEC 14496-3 Audio with the LATM
- * transport syntax as defined in ISO/IEC 14496-3
- * @GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS: ISO/IEC 14496-1
- * SL-packetized stream or FlexMux stream carried in PES packets
- * @GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_SECTIONS: ISO/IEC 14496-1 SL-packetized
- * stream or FlexMux stream carried in ISO/IEC 14496_sections
- * @GST_MPEGTS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD: ISO/IEC 13818-6 Synchronized
- * Download Protocol
- * @GST_MPEGTS_STREAM_TYPE_METADATA_PES_PACKETS: Metadata carried in PES packets
- * @GST_MPEGTS_STREAM_TYPE_METADATA_SECTIONS: Metadata carried in metadata_sections
- * @GST_MPEGTS_STREAM_TYPE_METADATA_DATA_CAROUSEL: Metadata carried in ISO/IEC
- * 13818-6 Data Carousel
- * @GST_MPEGTS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL: Metadata carried in
- * ISO/IEC 13818-6 Object Carousel
- * @GST_MPEGTS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD: Metadata carried in
- * ISO/IEC 13818-6 Synchronized Download Protocol
- * @GST_MPEGTS_STREAM_TYPE_MPEG2_IPMP: IPMP stream (defined in ISO/IEC 13818-11,
- * MPEG-2 IPMP)
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_H264: AVC video stream conforming to one or
- * more profiles defined in Annex A of Rec. ITU-T H.264 | ISO/IEC 14496-10 or
- * AVC video sub-bitstream of SVC as defined in 2.1.78 or MVC base view
- * sub-bitstream, as defined in 2.1.85, or AVC video sub-bitstream of MVC, as
- * defined in 2.1.88
- * @GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_CLEAN: ISO/IEC 14496-3 Audio, without
- * using any additional transport syntax, such as DST, ALS and SLS
- * @GST_MPEGTS_STREAM_TYPE_MPEG4_TIMED_TEXT: ISO/IEC 14496-17 Text
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_RVC: Auxiliary video stream as defined in
- * ISO/IEC 23002-3
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM: SVC video sub-bitstream
- * of an AVC video stream conforming to one or more profiles defined in Annex G
- * of Rec. ITU-T H.264 | ISO/IEC 14496-10
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM: MVC video sub-bitstream
- * of an AVC video stream conforming to one or more profiles defined in Annex H
- * of Rec. ITU-T H.264 | ISO/IEC 14496-10
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K: Video stream conforming to one or more
- * profiles as defined in Rec. ITU-T T.800 | ISO/IEC 15444-1
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW: Additional view
- * Rec. ITU-T H.262 | ISO/IEC 13818-2 video stream for service-compatible
- * stereoscopic 3D services
- * @GST_MPEGTS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW: Additional view
- * Rec. ITU-T H.264 | ISO/IEC 14496-10 video stream conforming to one or more
- * profiles defined in Annex A for service-compatible stereoscopic 3D services
- * @GST_MPEGTS_STREAM_TYPE_IPMP_STREAM: IPMP stream
- *
- * Type of mpeg-ts stream type.
- *
- * These values correspond to the base standard registered types. Depending
- * on the variant of mpeg-ts being used (Bluray, ATSC, DVB, ...), other
- * types might also be used, but will not conflict with these.
- *
- * Corresponds to table 2-34 of ITU H.222.0 | ISO/IEC 13818-1
- */
- typedef enum {
- GST_MPEGTS_STREAM_TYPE_RESERVED_00 = 0x00,
- GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1 = 0x01,
- GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2 = 0x02,
- GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG1 = 0x03,
- GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG2 = 0x04,
- GST_MPEGTS_STREAM_TYPE_PRIVATE_SECTIONS = 0x05,
- GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS = 0x06,
- GST_MPEGTS_STREAM_TYPE_MHEG = 0x07,
- GST_MPEGTS_STREAM_TYPE_DSM_CC = 0x08,
- GST_MPEGTS_STREAM_TYPE_H_222_1 = 0x09,
- GST_MPEGTS_STREAM_TYPE_DSMCC_A = 0x0a,
- GST_MPEGTS_STREAM_TYPE_DSMCC_B = 0x0b,
- GST_MPEGTS_STREAM_TYPE_DSMCC_C = 0x0c,
- GST_MPEGTS_STREAM_TYPE_DSMCC_D = 0x0d,
- GST_MPEGTS_STREAM_TYPE_AUXILIARY = 0x0e,
- GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS = 0x0f,
- GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG4 = 0x10,
- GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_LATM = 0x11,
- GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS = 0x12,
- GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_SECTIONS = 0x13,
- GST_MPEGTS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD = 0x14,
- GST_MPEGTS_STREAM_TYPE_METADATA_PES_PACKETS = 0x15,
- GST_MPEGTS_STREAM_TYPE_METADATA_SECTIONS = 0x16,
- GST_MPEGTS_STREAM_TYPE_METADATA_DATA_CAROUSEL = 0x17,
- GST_MPEGTS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL = 0x18,
- GST_MPEGTS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD = 0x19,
- GST_MPEGTS_STREAM_TYPE_MPEG2_IPMP = 0x1a,
- GST_MPEGTS_STREAM_TYPE_VIDEO_H264 = 0x1b,
- GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_CLEAN = 0x1c,
- GST_MPEGTS_STREAM_TYPE_MPEG4_TIMED_TEXT = 0x1d,
- GST_MPEGTS_STREAM_TYPE_VIDEO_RVC = 0x1e,
- GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM = 0x1f,
- GST_MPEGTS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM = 0x20,
- GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K = 0x21,
- GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW = 0x22,
- GST_MPEGTS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW = 0x23,
- GST_MPEGTS_STREAM_TYPE_VIDEO_HEVC = 0x24,
- /* 0x24 - 0x7e : Rec. ITU-T H.222.0 | ISO/IEC 13818-1 Reserved */
- GST_MPEGTS_STREAM_TYPE_IPMP_STREAM = 0x7f
- /* 0x80 - 0xff : User Private (or defined in other specs) */
- } GstMpegtsStreamType;
- /**
- * GstMpegtsPMTStream:
- * @stream_type: the type of stream. See #GstMpegtsStreamType
- * @pid: the PID of the stream
- * @descriptors: (element-type GstMpegtsDescriptor): the descriptors of the
- * stream
- *
- * An individual stream definition.
- */
- struct _GstMpegtsPMTStream
- {
- guint8 stream_type;
- guint16 pid;
- GPtrArray *descriptors;
- };
- /**
- * GstMpegtsPMT:
- * @pcr_pid: PID of the stream containing PCR
- * @descriptors: (element-type GstMpegtsDescriptor): array of #GstMpegtsDescriptor
- * @streams: (element-type GstMpegtsPMTStream): Array of #GstMpegtsPMTStream
- *
- * Program Map Table (ISO/IEC 13818-1).
- *
- * The program_number is contained in the subtable_extension field of the
- * container #GstMpegtsSection.
- */
- struct _GstMpegtsPMT
- {
- guint16 pcr_pid;
- guint16 program_number;
- GPtrArray *descriptors;
- GPtrArray *streams;
- };
- GType gst_mpegts_pmt_get_type (void);
- GType gst_mpegts_pmt_stream_get_type (void);
- GstMpegtsPMT *gst_mpegts_pmt_new (void);
- GstMpegtsPMTStream *gst_mpegts_pmt_stream_new (void);
- const GstMpegtsPMT *gst_mpegts_section_get_pmt (GstMpegtsSection *section);
- GstMpegtsSection *gst_mpegts_section_from_pmt (GstMpegtsPMT *pmt, guint16 pid);
- /* TSDT */
- GPtrArray *gst_mpegts_section_get_tsdt (GstMpegtsSection *section);
- /* generic */
- #define gst_mpegts_section_ref(section) ((GstMpegtsSection*) gst_mini_object_ref (GST_MINI_OBJECT_CAST (section)))
- #define gst_mpegts_section_unref(section) (gst_mini_object_unref (GST_MINI_OBJECT_CAST (section)))
- GstMessage *gst_message_new_mpegts_section (GstObject *parent, GstMpegtsSection *section);
- gboolean gst_mpegts_section_send_event (GstMpegtsSection * section, GstElement * element);
- GstMpegtsSection *gst_event_parse_mpegts_section (GstEvent * event);
- GstMpegtsSection *gst_message_parse_mpegts_section (GstMessage *message);
- GstMpegtsSection *gst_mpegts_section_new (guint16 pid,
- guint8 * data,
- gsize data_size);
- guint8 *gst_mpegts_section_packetize (GstMpegtsSection * section, gsize * output_size);
- G_END_DECLS
- #endif /* GST_MPEGTS_SECTION_H */
|