## Base MPEG-TS descriptors

Base MPEG-TS descriptors — Descriptors for ITU H.222.0 | ISO/IEC 13818-1

## Synopsis

    #include <gst/mpegts/mpegts.h>

    struct              GstMpegTsDescriptor;
    enum                GstMpegTsDescriptorType;
    enum                GstMpegTsMiscDescriptorType;
    const GstMpegTsDescriptor * gst_mpegts_find_descriptor  (GPtrArray *descriptors,
                                                             guint8 tag);
    GPtrArray *         gst_mpegts_parse_descriptors        (guint8 *buffer,
                                                             gsize buf_len);

    struct              GstMpegTsISO639LanguageDescriptor;
    enum                GstMpegTsIso639AudioType;
    gboolean            gst_mpegts_descriptor_parse_iso_639_language
                                                            (const GstMpegTsDescriptor *descriptor,
                                                             GstMpegTsISO639LanguageDescriptor *res);
    gboolean            gst_mpegts_descriptor_parse_dvb_stream_identifier
                                                            (const GstMpegTsDescriptor *descriptor,
                                                             guint8 *component_tag);

    struct              GstMpegTsLogicalChannel;
    struct              GstMpegTsLogicalChannelDescriptor;
    gboolean            gst_mpegts_descriptor_parse_logical_channel
                                                            (const GstMpegTsDescriptor *descriptor,
                                                             GstMpegTsLogicalChannelDescriptor *res);

## Object Hierarchy

      GBoxed
       +----GstMpegTsDescriptor

      GEnum
       +----GstMpegTsDescriptorType

      GEnum
       +----GstMpegTsIso639AudioType

## Description

These are the base descriptor types and methods.

For more details, refer to the ITU H.222.0 or ISO/IEC 13818-1 specifications and other specifications mentionned in the documentation.

## Details

### struct GstMpegTsDescriptor

    struct GstMpegTsDescriptor {
      guint8 tag;
      guint8 tag_extension;
      guint8 length;
      const guint8 *data;
    };

Mpeg-TS descriptor (ISO/IEC 13818-1).

guint8 `tag`; | the type of descriptor
guint8 `tag_extension`; | the extended type (if `descriptor_tag` is 0x7f)
guint8 `length`; | the length of the descriptor content (excluding tag/length field)
const guint8 *`data`; | the full descriptor data (including tag, extension, length). The first two bytes are the `tag` and `tag_extension`.

### enum GstMpegTsDescriptorType

    typedef enum {
      /* 0-18 ISO/IEC 13818-1 (H222.0 06/2012) */
      GST_MTS_DESC_RESERVED_00                      = 0x00,
      GST_MTS_DESC_RESERVED_01                      = 0x01,
      GST_MTS_DESC_VIDEO_STREAM                     = 0x02,
      GST_MTS_DESC_AUDIO_STREAM                     = 0x03,
      GST_MTS_DESC_HIERARCHY                        = 0x04,
      GST_MTS_DESC_REGISTRATION                     = 0x05,
      GST_MTS_DESC_DATA_STREAM_ALIGNMENT            = 0x06,
      GST_MTS_DESC_TARGET_BACKGROUND_GRID           = 0x07,
      GST_MTS_DESC_VIDEO_WINDOW                     = 0x08,
      GST_MTS_DESC_CA                               = 0x09,
      GST_MTS_DESC_ISO_639_LANGUAGE                 = 0x0A,
      GST_MTS_DESC_SYSTEM_CLOCK                     = 0x0B,
      GST_MTS_DESC_MULTIPLEX_BUFFER_UTILISATION     = 0x0C,
      GST_MTS_DESC_COPYRIGHT                        = 0x0D,
      GST_MTS_DESC_MAXIMUM_BITRATE                  = 0x0E,
      GST_MTS_DESC_PRIVATE_DATA_INDICATOR           = 0x0F,
      GST_MTS_DESC_SMOOTHING_BUFFER                 = 0x10,
      GST_MTS_DESC_STD                              = 0x11,
      GST_MTS_DESC_IBP                              = 0x12,

      /* 19-26 Defined in ISO/IEC 13818-6 (Extensions for DSM-CC) */
      GST_MTS_DESC_DSMCC_CAROUSEL_IDENTIFIER        = 0x13,
      GST_MTS_DESC_DSMCC_ASSOCIATION_TAG            = 0x14,
      GST_MTS_DESC_DSMCC_DEFERRED_ASSOCIATION_TAG   = 0x15,
      /* 0x16 is reserved (so far) */
      GST_MTS_DESC_DSMCC_NPT_REFERENCE              = 0x17,
      GST_MTS_DESC_DSMCC_NPT_ENDPOINT               = 0x18,
      GST_MTS_DESC_DSMCC_STREAM_MODE                = 0x19,
      GST_MTS_DESC_DSMCC_STREAM_EVENT               = 0x1A,

      /* 27-54 Later additions to ISO/IEC 13818-1 (H222.0 06/2012) */
      GST_MTS_DESC_MPEG4_VIDEO                      = 0x1B,
      GST_MTS_DESC_MPEG4_AUDIO                      = 0x1C,
      GST_MTS_DESC_IOD                              = 0x1D,
      GST_MTS_DESC_SL                               = 0x1E,
      GST_MTS_DESC_FMC                              = 0x1F,
      GST_MTS_DESC_EXTERNAL_ES_ID                   = 0x20,
      GST_MTS_DESC_MUX_CODE                         = 0x21,
      GST_MTS_DESC_FMX_BUFFER_SIZE                  = 0x22,
      GST_MTS_DESC_MULTIPLEX_BUFFER                 = 0x23,
      GST_MTS_DESC_CONTENT_LABELING                 = 0x24,
      GST_MTS_DESC_METADATA_POINTER                 = 0x25,
      GST_MTS_DESC_METADATA                         = 0x26,
      GST_MTS_DESC_METADATA_STD                     = 0x27,
      GST_MTS_DESC_AVC_VIDEO                        = 0x28,
      /* defined in ISO/IEC 13818-11, MPEG-2 IPMP */
      GST_MTS_DESC_IPMP                             = 0x29,
      GST_MTS_DESC_AVC_TIMING_AND_HRD               = 0x2A,
      GST_MTS_DESC_MPEG2_AAC_AUDIO                  = 0x2B,
      GST_MTS_DESC_FLEX_MUX_TIMING                  = 0x2C,
      GST_MTS_DESC_MPEG4_TEXT                       = 0x2D,
      GST_MTS_DESC_MPEG4_AUDIO_EXTENSION            = 0x2E,
      GST_MTS_DESC_AUXILIARY_VIDEO_STREAM           = 0x2F,
      GST_MTS_DESC_SVC_EXTENSION                    = 0x30,
      GST_MTS_DESC_MVC_EXTENSION                    = 0x31,
      GST_MTS_DESC_J2K_VIDEO                        = 0x32,
      GST_MTS_DESC_MVC_OPERATION_POINT              = 0x33,
      GST_MTS_DESC_MPEG2_STEREOSCOPIC_VIDEO_FORMAT  = 0x34,
      GST_MTS_DESC_STEREOSCOPIC_PROGRAM_INFO        = 0x35,
      GST_MTS_DESC_STEREOSCOPIC_VIDEO_INFO          = 0x36,

      /* 55-63 ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Reserved */
    } GstMpegTsDescriptorType;

The type of GstMpegTsDescriptor

These values correspond to the registered descriptor type from the base MPEG-TS specifications (ITU H.222.0 | ISO/IEC 13818-1).

Consult the relevant specifications for more details.

`GST_MTS_DESC_RESERVED_00` |
`GST_MTS_DESC_RESERVED_01` |
`GST_MTS_DESC_VIDEO_STREAM` |
`GST_MTS_DESC_AUDIO_STREAM` |
`GST_MTS_DESC_HIERARCHY` |
`GST_MTS_DESC_REGISTRATION` |
`GST_MTS_DESC_DATA_STREAM_ALIGNMENT` |
`GST_MTS_DESC_TARGET_BACKGROUND_GRID` |
`GST_MTS_DESC_VIDEO_WINDOW` |
`GST_MTS_DESC_CA` |
`GST_MTS_DESC_ISO_639_LANGUAGE` |
`GST_MTS_DESC_SYSTEM_CLOCK` |
`GST_MTS_DESC_MULTIPLEX_BUFFER_UTILISATION` |
`GST_MTS_DESC_COPYRIGHT` |
`GST_MTS_DESC_MAXIMUM_BITRATE` |
`GST_MTS_DESC_PRIVATE_DATA_INDICATOR` |
`GST_MTS_DESC_SMOOTHING_BUFFER` |
`GST_MTS_DESC_STD` |
`GST_MTS_DESC_IBP` |
`GST_MTS_DESC_DSMCC_CAROUSEL_IDENTIFIER` |
`GST_MTS_DESC_DSMCC_ASSOCIATION_TAG` |
`GST_MTS_DESC_DSMCC_DEFERRED_ASSOCIATION_TAG` |
`GST_MTS_DESC_DSMCC_NPT_REFERENCE` |
`GST_MTS_DESC_DSMCC_NPT_ENDPOINT` |
`GST_MTS_DESC_DSMCC_STREAM_MODE` |
`GST_MTS_DESC_DSMCC_STREAM_EVENT` |
`GST_MTS_DESC_MPEG4_VIDEO` |
`GST_MTS_DESC_MPEG4_AUDIO` |
`GST_MTS_DESC_IOD` |
`GST_MTS_DESC_SL` |
`GST_MTS_DESC_FMC` |
`GST_MTS_DESC_EXTERNAL_ES_ID` |
`GST_MTS_DESC_MUX_CODE` |
`GST_MTS_DESC_FMX_BUFFER_SIZE` |
`GST_MTS_DESC_MULTIPLEX_BUFFER` |
`GST_MTS_DESC_CONTENT_LABELING` |
`GST_MTS_DESC_METADATA_POINTER` |
`GST_MTS_DESC_METADATA` |
`GST_MTS_DESC_METADATA_STD` |
`GST_MTS_DESC_AVC_VIDEO` |
`GST_MTS_DESC_IPMP` |
`GST_MTS_DESC_AVC_TIMING_AND_HRD` |
`GST_MTS_DESC_MPEG2_AAC_AUDIO` |
`GST_MTS_DESC_FLEX_MUX_TIMING` |
`GST_MTS_DESC_MPEG4_TEXT` |
`GST_MTS_DESC_MPEG4_AUDIO_EXTENSION` |
`GST_MTS_DESC_AUXILIARY_VIDEO_STREAM` |
`GST_MTS_DESC_SVC_EXTENSION` |
`GST_MTS_DESC_MVC_EXTENSION` |
`GST_MTS_DESC_J2K_VIDEO` |
`GST_MTS_DESC_MVC_OPERATION_POINT` |
`GST_MTS_DESC_MPEG2_STEREOSCOPIC_VIDEO_FORMAT` |
`GST_MTS_DESC_STEREOSCOPIC_PROGRAM_INFO` |
`GST_MTS_DESC_STEREOSCOPIC_VIDEO_INFO` |

### enum GstMpegTsMiscDescriptorType

    typedef enum {
      /* 0x80 - 0xFE are user defined */
      GST_MTS_DESC_AC3_AUDIO_STREAM                 = 0x81,
      GST_MTS_DESC_DTG_LOGICAL_CHANNEL              = 0x83,    /* from DTG D-Book */
    } GstMpegTsMiscDescriptorType;

The type of GstMpegTsDescriptor

These values correspond to miscellaneous descriptor types that are not yet identified from known specifications.

`GST_MTS_DESC_AC3_AUDIO_STREAM` |
`GST_MTS_DESC_DTG_LOGICAL_CHANNEL` |

### gst_mpegts_find_descriptor ()

    const GstMpegTsDescriptor * gst_mpegts_find_descriptor  (GPtrArray *descriptors,
                                                             guint8 tag);

Finds the first descriptor of type `tag` in the array.

Note: To look for descriptors that can be present more than once in an array of descriptors, iterate the GArray manually.

`descriptors` : | an array of GstMpegTsDescriptor. [element-type GstMpegTsDescriptor][transfer none]
`tag` : | the tag to look for
Returns : | the first descriptor matchin `tag`, else `NULL`. [transfer none]

### gst_mpegts_parse_descriptors ()

    GPtrArray *         gst_mpegts_parse_descriptors        (guint8 *buffer,
                                                             gsize buf_len);

Parses the descriptors present in `buffer` and returns them as an array.

Note: The data provided in `buffer` will not be copied.

`buffer` : | descriptors to parse. [transfer none]
`buf_len` : | Size of `buffer`
Returns : | an array of the parsed descriptors or `NULL` if there was an error. Release with g_array_unref when done with it. [transfer full][element-type GstMpegTsDescriptor]

### struct GstMpegTsISO639LanguageDescriptor

    struct GstMpegTsISO639LanguageDescriptor {
      guint                    nb_language;
      gchar                    language[64][3];
      GstMpegTsIso639AudioType audio_type[64];
    };

### enum GstMpegTsIso639AudioType

    typedef enum {
      GST_MPEGTS_AUDIO_TYPE_UNDEFINED = 0,
      GST_MPEGTS_AUDIO_TYPE_CLEAN_EFFECTS,
      GST_MPEGTS_AUDIO_TYPE_HEARING_IMPAIRED,
      GST_MPEGTS_AUDIO_TYPE_VISUAL_IMPAIRED_COMMENTARY
    } GstMpegTsIso639AudioType;

`GST_MPEGTS_AUDIO_TYPE_UNDEFINED` |
`GST_MPEGTS_AUDIO_TYPE_CLEAN_EFFECTS` |
`GST_MPEGTS_AUDIO_TYPE_HEARING_IMPAIRED` |
`GST_MPEGTS_AUDIO_TYPE_VISUAL_IMPAIRED_COMMENTARY` |

### gst_mpegts_descriptor_parse_iso_639_language ()

    gboolean            gst_mpegts_descriptor_parse_iso_639_language
                                                            (const GstMpegTsDescriptor *descriptor,
                                                             GstMpegTsISO639LanguageDescriptor *res);

Extracts the iso 639-2 language information from `descriptor`.

Note: Use gst_tag_get_language_code if you want to get the the ISO 639-1 language code from the returned ISO 639-2 one.

`descriptor` : | a `GST_MTS_DESC_ISO_639_LANGUAGE` GstMpegTsDescriptor
`res` : | the GstMpegTsISO639LanguageDescriptor to fill. [out][transfer none]
Returns : | `TRUE` if parsing succeeded, else `FALSE`.

### gst_mpegts_descriptor_parse_dvb_stream_identifier ()

    gboolean            gst_mpegts_descriptor_parse_dvb_stream_identifier
                                                            (const GstMpegTsDescriptor *descriptor,
                                                             guint8 *component_tag);

### struct GstMpegTsLogicalChannel

    struct GstMpegTsLogicalChannel {
      guint16   service_id;
      gboolean  visible_service;
      guint16   logical_channel_number;
    };

### struct GstMpegTsLogicalChannelDescriptor

    struct GstMpegTsLogicalChannelDescriptor {
      guint                   nb_channels;
      GstMpegTsLogicalChannel channels[64];
    };

### gst_mpegts_descriptor_parse_logical_channel ()

    gboolean            gst_mpegts_descriptor_parse_logical_channel
                                                            (const GstMpegTsDescriptor *descriptor,
                                                             GstMpegTsLogicalChannelDescriptor *res);

Extracts the logical channels from `descriptor`.

`descriptor` : | a `GST_MTS_DESC_DTG_LOGICAL_CHANNEL` GstMpegTsDescriptor
`res` : | the GstMpegTsLogicalChannelDescriptor to fill. [out][transfer none]
Returns : | `TRUE` if parsing succeeded, else `FALSE`.