mpegts: moved metadata descriptors to gstmpegtsdescriptor
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6793>
This commit is contained in:
parent
154b84649f
commit
669a351c78
@ -1,137 +0,0 @@
|
|||||||
/* Gstreamer
|
|
||||||
* Copyright 2023 Brad Hards <bradh@frogmouth.net>
|
|
||||||
*
|
|
||||||
* 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., 59 Temple Place - Suite 330,
|
|
||||||
* Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "mpegts.h"
|
|
||||||
#include "gstmpegts-private.h"
|
|
||||||
|
|
||||||
#define GST_CAT_DEFAULT mpegts_debug
|
|
||||||
|
|
||||||
static GstMpegtsMetadataDescriptor
|
|
||||||
* _gst_mpegts_metadata_descriptor_copy
|
|
||||||
(GstMpegtsMetadataDescriptor * source)
|
|
||||||
{
|
|
||||||
GstMpegtsMetadataDescriptor *copy =
|
|
||||||
g_memdup2 (source, sizeof (GstMpegtsMetadataDescriptor));
|
|
||||||
return copy;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_gst_mpegts_metadata_descriptor_free (GstMpegtsMetadataDescriptor * desc)
|
|
||||||
{
|
|
||||||
g_free (desc);
|
|
||||||
}
|
|
||||||
|
|
||||||
G_DEFINE_BOXED_TYPE (GstMpegtsMetadataDescriptor,
|
|
||||||
gst_mpegts_metadata_descriptor,
|
|
||||||
(GBoxedCopyFunc) _gst_mpegts_metadata_descriptor_copy,
|
|
||||||
(GFreeFunc) _gst_mpegts_metadata_descriptor_free);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_mpegts_descriptor_parse_metadata:
|
|
||||||
* @descriptor: a %GST_TYPE_MPEGTS_METADATA_DESCRIPTOR #GstMpegtsDescriptor
|
|
||||||
* @res: (out) (transfer full): #GstMpegtsMetadataDescriptor
|
|
||||||
*
|
|
||||||
* Parses out the metadata descriptor from the @descriptor.
|
|
||||||
*
|
|
||||||
* See ISO/IEC 13818-1:2018 Section 2.6.60 and 2.6.61 for details.
|
|
||||||
* metadata_application_format is provided in Table 2-82. metadata_format is
|
|
||||||
* provided in Table 2-85.
|
|
||||||
*
|
|
||||||
* Returns: %TRUE if the parsing worked correctly, else %FALSE.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
gboolean
|
|
||||||
gst_mpegts_descriptor_parse_metadata (const GstMpegtsDescriptor * descriptor,
|
|
||||||
GstMpegtsMetadataDescriptor ** desc)
|
|
||||||
{
|
|
||||||
guint8 *data;
|
|
||||||
guint8 flag;
|
|
||||||
GstMpegtsMetadataDescriptor *res;
|
|
||||||
|
|
||||||
g_return_val_if_fail (descriptor != NULL && desc != NULL, FALSE);
|
|
||||||
__common_desc_checks (descriptor, GST_MTS_DESC_METADATA, 5, FALSE);
|
|
||||||
|
|
||||||
data = (guint8 *) descriptor->data + 2;
|
|
||||||
|
|
||||||
res = g_new0 (GstMpegtsMetadataDescriptor, 1);
|
|
||||||
|
|
||||||
res->metadata_application_format = GST_READ_UINT16_BE (data);
|
|
||||||
data += 2;
|
|
||||||
if (res->metadata_application_format == 0xFFFF) {
|
|
||||||
// skip over metadata_application_format_identifier if it is provided
|
|
||||||
data += 4;
|
|
||||||
}
|
|
||||||
res->metadata_format = *data;
|
|
||||||
data += 1;
|
|
||||||
if (res->metadata_format == GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD) {
|
|
||||||
res->metadata_format_identifier = GST_READ_UINT32_BE (data);
|
|
||||||
data += 4;
|
|
||||||
}
|
|
||||||
res->metadata_service_id = *data;
|
|
||||||
data += 1;
|
|
||||||
flag = *data;
|
|
||||||
res->decoder_config_flags = flag >> 5;
|
|
||||||
res->dsm_cc_flag = (flag & 0x10);
|
|
||||||
|
|
||||||
// There are more values if the dsm_cc_flag or decoder flags are set.
|
|
||||||
|
|
||||||
*desc = res;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_mpegts_descriptor_parse_metadata_std:
|
|
||||||
* @descriptor: a %GST_MTS_DESC_METADATA_STD #GstMpegtsDescriptor
|
|
||||||
* @metadata_input_leak_rate (out): the input leak rate in units of 400bits/sec.
|
|
||||||
* @metadata_buffer_size (out): the buffer size in units of 1024 bytes
|
|
||||||
* @metadata_output_leak_rate (out): the output leak rate in units of 400bits/sec.
|
|
||||||
*
|
|
||||||
* Extracts the metadata STD descriptor from @descriptor.
|
|
||||||
*
|
|
||||||
* See ISO/IEC 13818-1:2018 Section 2.6.62 and 2.6.63 for details.
|
|
||||||
*
|
|
||||||
* Returns: %TRUE if parsing succeeded, else %FALSE.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
gboolean
|
|
||||||
gst_mpegts_descriptor_parse_metadata_std (const GstMpegtsDescriptor *
|
|
||||||
descriptor, guint32 * metadata_input_leak_rate,
|
|
||||||
guint32 * metadata_buffer_size, guint32 * metadata_output_leak_rate)
|
|
||||||
{
|
|
||||||
guint8 *data;
|
|
||||||
|
|
||||||
g_return_val_if_fail (descriptor != NULL && metadata_input_leak_rate != NULL
|
|
||||||
&& metadata_buffer_size != NULL
|
|
||||||
&& metadata_output_leak_rate != NULL, FALSE);
|
|
||||||
__common_desc_checks (descriptor, GST_MTS_DESC_METADATA_STD, 9, FALSE);
|
|
||||||
data = (guint8 *) descriptor->data + 2;
|
|
||||||
*metadata_input_leak_rate = GST_READ_UINT24_BE (data) & 0x3FFFFF;
|
|
||||||
data += 3;
|
|
||||||
*metadata_buffer_size = GST_READ_UINT24_BE (data) & 0x3FFFFF;
|
|
||||||
data += 3;
|
|
||||||
*metadata_output_leak_rate = GST_READ_UINT24_BE (data) & 0x3FFFFF;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
@ -1,116 +0,0 @@
|
|||||||
/* Gstreamer
|
|
||||||
* Copyright 2023 Brad Hards <bradh@frogmouth.net>
|
|
||||||
*
|
|
||||||
* 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., 59 Temple Place - Suite 330,
|
|
||||||
* Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __GST_MPEGTS_METADATA_DESCRIPTOR_H__
|
|
||||||
#define __GST_MPEGTS_METADATA_DESCRIPTOR_H__
|
|
||||||
|
|
||||||
#include <gst/gst.h>
|
|
||||||
#include <gst/mpegts/mpegts-prelude.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GstMpegtsMetadataFormat:
|
|
||||||
*
|
|
||||||
* metadata_descriptor metadata_format valid values. See ISO/IEC 13818-1:2018(E) Table 2-85.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
/**
|
|
||||||
* GST_MPEGTS_METADATA_FORMAT_TEM:
|
|
||||||
*
|
|
||||||
* ISO/IEC 15938-1 TeM.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
GST_MPEGTS_METADATA_FORMAT_TEM = 0x10,
|
|
||||||
/**
|
|
||||||
* GST_MPEGTS_METADATA_FORMAT_BIM:
|
|
||||||
*
|
|
||||||
* ISO/IEC 15938-1 BiM.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
GST_MPEGTS_METADATA_FORMAT_BIM = 0x11,
|
|
||||||
/**
|
|
||||||
* GST_MPEGTS_METADATA_FORMAT_APPLICATION_FORMAT:
|
|
||||||
*
|
|
||||||
* Defined by metadata application format.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
GST_MPEGTS_METADATA_FORMAT_APPLICATION_FORMAT = 0x3f,
|
|
||||||
/**
|
|
||||||
* GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD:
|
|
||||||
*
|
|
||||||
* Defined by metadata_format_identifier field.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD = 0xff
|
|
||||||
} GstMpegtsMetadataFormat;
|
|
||||||
|
|
||||||
|
|
||||||
/* MPEG-TS Metadata Descriptor (0x26) */
|
|
||||||
typedef struct _GstMpegtsMetadataDescriptor GstMpegtsMetadataDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GstMpegtsMetadataDescriptor:
|
|
||||||
* @metadata_application_format: specifies the application responsible for defining usage, syntax and semantics
|
|
||||||
* @metadata_format: indicates the format and coding of the metadata
|
|
||||||
* @metadata_format_identifier: format identifier (equivalent to registration descriptor), for example 0x4B4C4641 ('KLVA') to indicate SMPTE 336 KLV.
|
|
||||||
* @metadata_service_id: metadata service to which this metadata descriptor applies, typically 0x00
|
|
||||||
* @decoder_config_flags: decoder flags, see ISO/IEC 13818-1:2018 Table 2-88.
|
|
||||||
* @dsm_cc_flag: true if stream associated with this descriptor is in an ISO/IEC 13818-6 data or object carousel.
|
|
||||||
*
|
|
||||||
* The metadata descriptor specifies parameters of a metadata service carried in an MPEG-2 Transport Stream (or Program Stream). The descriptor is included in the PMT in the descriptor loop for the elementary stream that carries the
|
|
||||||
metadata service. The descriptor specifies the format of the associated metadata, and contains the value of the
|
|
||||||
metadata_service_id to identify the metadata service to which the metadata descriptor applies.
|
|
||||||
*
|
|
||||||
* Note that this structure does not include all of the metadata_descriptor items, and will need extension to support DSM-CC and private data.
|
|
||||||
* See ISO/IEC 13818-1:2018 Section 2.6.60 and Section 2.6.61 for more information.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
struct _GstMpegtsMetadataDescriptor
|
|
||||||
{
|
|
||||||
guint16 metadata_application_format;
|
|
||||||
GstMpegtsMetadataFormat metadata_format;
|
|
||||||
guint32 metadata_format_identifier;
|
|
||||||
guint8 metadata_service_id;
|
|
||||||
guint8 decoder_config_flags;
|
|
||||||
gboolean dsm_cc_flag;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GST_TYPE_MPEGTS_METADATA_DESCRIPTOR:
|
|
||||||
*
|
|
||||||
* metadata_descriptor type
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
#define GST_TYPE_MPEGTS_METADATA_DESCRIPTOR (gst_mpegts_metadata_descriptor_get_type ())
|
|
||||||
|
|
||||||
GST_MPEGTS_API
|
|
||||||
GType gst_mpegts_metadata_descriptor_get_type (void);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,106 +0,0 @@
|
|||||||
/* Gstreamer
|
|
||||||
* Copyright 2021 Brad Hards <bradh@frogmouth.net>
|
|
||||||
*
|
|
||||||
* 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., 59 Temple Place - Suite 330,
|
|
||||||
* Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gst-mpegtspesmetadatameta.h"
|
|
||||||
|
|
||||||
#define GST_CAT_DEFAULT mpegts_debug
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
gst_mpegts_pes_metadata_meta_init (GstMpegtsPESMetadataMeta * meta,
|
|
||||||
gpointer params, GstBuffer * buffer)
|
|
||||||
{
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_mpegts_pes_metadata_meta_free (GstMpegtsPESMetadataMeta * meta,
|
|
||||||
GstBuffer * buffer)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
gst_mpegts_pes_metadata_meta_transform (GstBuffer * dest, GstMeta * meta,
|
|
||||||
GstBuffer * buffer, GQuark type, gpointer data)
|
|
||||||
{
|
|
||||||
GstMpegtsPESMetadataMeta *source_meta, *dest_meta;
|
|
||||||
|
|
||||||
source_meta = (GstMpegtsPESMetadataMeta *) meta;
|
|
||||||
|
|
||||||
if (GST_META_TRANSFORM_IS_COPY (type)) {
|
|
||||||
GstMetaTransformCopy *copy = data;
|
|
||||||
if (!copy->region) {
|
|
||||||
dest_meta = gst_buffer_add_mpegts_pes_metadata_meta (dest);
|
|
||||||
if (!dest_meta)
|
|
||||||
return FALSE;
|
|
||||||
dest_meta->metadata_service_id = source_meta->metadata_service_id;
|
|
||||||
dest_meta->flags = source_meta->flags;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* return FALSE, if transform type is not supported */
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
GType
|
|
||||||
gst_mpegts_pes_metadata_meta_api_get_type (void)
|
|
||||||
{
|
|
||||||
static GType type;
|
|
||||||
static const gchar *tags[] = { NULL };
|
|
||||||
|
|
||||||
if (g_once_init_enter (&type)) {
|
|
||||||
GType _type =
|
|
||||||
gst_meta_api_type_register ("GstMpegtsPESMetadataMetaAPI", tags);
|
|
||||||
g_once_init_leave (&type, _type);
|
|
||||||
}
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
const GstMetaInfo *
|
|
||||||
gst_mpegts_pes_metadata_meta_get_info (void)
|
|
||||||
{
|
|
||||||
static const GstMetaInfo *mpegts_pes_metadata_meta_info = NULL;
|
|
||||||
|
|
||||||
if (g_once_init_enter ((GstMetaInfo **) & mpegts_pes_metadata_meta_info)) {
|
|
||||||
const GstMetaInfo *meta =
|
|
||||||
gst_meta_register (GST_MPEGTS_PES_METADATA_META_API_TYPE,
|
|
||||||
"GstMpegtsPESMetadataMeta", sizeof (GstMpegtsPESMetadataMeta),
|
|
||||||
(GstMetaInitFunction) gst_mpegts_pes_metadata_meta_init,
|
|
||||||
(GstMetaFreeFunction) gst_mpegts_pes_metadata_meta_free,
|
|
||||||
(GstMetaTransformFunction) gst_mpegts_pes_metadata_meta_transform);
|
|
||||||
g_once_init_leave ((GstMetaInfo **) & mpegts_pes_metadata_meta_info,
|
|
||||||
(GstMetaInfo *) meta);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mpegts_pes_metadata_meta_info;
|
|
||||||
}
|
|
||||||
|
|
||||||
GstMpegtsPESMetadataMeta *
|
|
||||||
gst_buffer_add_mpegts_pes_metadata_meta (GstBuffer * buffer)
|
|
||||||
{
|
|
||||||
GstMpegtsPESMetadataMeta *meta;
|
|
||||||
meta =
|
|
||||||
(GstMpegtsPESMetadataMeta *) gst_buffer_add_meta (buffer,
|
|
||||||
GST_MPEGTS_PES_METADATA_META_INFO, NULL);
|
|
||||||
return meta;
|
|
||||||
}
|
|
@ -1,108 +0,0 @@
|
|||||||
/* Gstreamer
|
|
||||||
* Copyright 2021,2023 Brad Hards <bradh@frogmouth.net>
|
|
||||||
*
|
|
||||||
* 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., 59 Temple Place - Suite 330,
|
|
||||||
* Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __GST_MPEGTS_PES_METADATA_META_H__
|
|
||||||
#define __GST_MPEGTS_PES_METADATA_META_H__
|
|
||||||
|
|
||||||
#include <gst/gst.h>
|
|
||||||
#include <gst/mpegts/mpegts-prelude.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
typedef struct _GstMpegtsPESMetadataMeta GstMpegtsPESMetadataMeta;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_mpegts_pes_metadata_meta_api_get_type
|
|
||||||
*
|
|
||||||
* Return the #GType associated with #GstMpegtsPESMetadataMeta
|
|
||||||
*
|
|
||||||
* Returns: a #GType
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
GST_MPEGTS_API
|
|
||||||
GType gst_mpegts_pes_metadata_meta_api_get_type (void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GST_MPEGTS_PES_METADATA_META_API_TYPE:
|
|
||||||
*
|
|
||||||
* The #GType associated with #GstMpegtsPESMetadataMeta.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
#define GST_MPEGTS_PES_METADATA_META_API_TYPE (gst_mpegts_pes_metadata_meta_api_get_type())
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GST_MPEGTS_PES_METADATA_META_INFO:
|
|
||||||
*
|
|
||||||
* The #GstMetaInfo associated with #GstMpegtsPESMetadataMeta.
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
#define GST_MPEGTS_PES_METADATA_META_INFO (gst_mpegts_pes_metadata_meta_get_info())
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_mpegts_pes_metadata_meta_get_info:
|
|
||||||
*
|
|
||||||
* Gets the global #GstMetaInfo describing the #GstMpegtsPESMetadataMeta meta.
|
|
||||||
*
|
|
||||||
* Returns: (transfer none): The #GstMetaInfo
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
GST_MPEGTS_API
|
|
||||||
const GstMetaInfo * gst_mpegts_pes_metadata_meta_get_info (void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GstMpegtsPESMetadataMeta:
|
|
||||||
* @meta: parent #GstMeta
|
|
||||||
* @metadata_service_id: metadata service identifier
|
|
||||||
* @flags: bit flags, see spec for details
|
|
||||||
*
|
|
||||||
* Extra buffer metadata describing the PES Metadata context.
|
|
||||||
* This is based on the Metadata AU cell header in
|
|
||||||
* ISO/IEC 13818-1:2018 Section 2.12.4.
|
|
||||||
*
|
|
||||||
* AU_cell_data_length is not provided, since it matches the length of the buffer
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
struct _GstMpegtsPESMetadataMeta {
|
|
||||||
GstMeta meta;
|
|
||||||
guint8 metadata_service_id;
|
|
||||||
guint8 flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gst_buffer_add_mpegts_pes_metadata_meta:
|
|
||||||
* @buffer: a #GstBuffer
|
|
||||||
*
|
|
||||||
* Creates and adds a #GstMpegtsPESMetadataMeta to a @buffer.
|
|
||||||
*
|
|
||||||
* Returns: (transfer none): a newly created #GstMpegtsPESMetadataMeta
|
|
||||||
*
|
|
||||||
* Since: 1.24
|
|
||||||
*/
|
|
||||||
GST_MPEGTS_API
|
|
||||||
GstMpegtsPESMetadataMeta *
|
|
||||||
gst_buffer_add_mpegts_pes_metadata_meta (GstBuffer * buffer);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include "mpegts.h"
|
#include "mpegts.h"
|
||||||
#include "gstmpegts-private.h"
|
#include "gstmpegts-private.h"
|
||||||
|
#include <gst/base/gstbytewriter.h>
|
||||||
|
|
||||||
#define DEFINE_STATIC_COPY_FUNCTION(type, name) \
|
#define DEFINE_STATIC_COPY_FUNCTION(type, name) \
|
||||||
static type * _##name##_copy (type * source) \
|
static type * _##name##_copy (type * source) \
|
||||||
@ -1247,3 +1248,232 @@ gst_mpegts_descriptor_from_custom_with_extension (guint8 tag,
|
|||||||
|
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstMpegtsMetadataDescriptor *
|
||||||
|
_gst_mpegts_metadata_descriptor_copy (GstMpegtsMetadataDescriptor * source)
|
||||||
|
{
|
||||||
|
GstMpegtsMetadataDescriptor *copy =
|
||||||
|
g_memdup2 (source, sizeof (GstMpegtsMetadataDescriptor));
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gst_mpegts_metadata_descriptor_free (GstMpegtsMetadataDescriptor * desc)
|
||||||
|
{
|
||||||
|
g_free (desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
G_DEFINE_BOXED_TYPE (GstMpegtsMetadataDescriptor,
|
||||||
|
gst_mpegts_metadata_descriptor,
|
||||||
|
(GBoxedCopyFunc) _gst_mpegts_metadata_descriptor_copy,
|
||||||
|
(GFreeFunc) _gst_mpegts_metadata_descriptor_free);
|
||||||
|
|
||||||
|
GstMpegtsDescriptor *
|
||||||
|
gst_mpegts_descriptor_from_metadata (const GstMpegtsMetadataDescriptor *
|
||||||
|
metadata_descriptor)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (metadata_descriptor != NULL, NULL);
|
||||||
|
|
||||||
|
int wr_size = 0;
|
||||||
|
guint8 *add_info = NULL;
|
||||||
|
GstByteWriter writer;
|
||||||
|
|
||||||
|
// metadata_descriptor
|
||||||
|
gst_byte_writer_init_with_size (&writer, 32, FALSE);
|
||||||
|
|
||||||
|
gst_byte_writer_put_uint16_be (&writer,
|
||||||
|
metadata_descriptor->metadata_application_format);
|
||||||
|
if (metadata_descriptor->metadata_application_format == 0xFFFF) {
|
||||||
|
gst_byte_writer_put_uint32_be (&writer, metadata_descriptor->metadata_format_identifier); // metadata_application_format_identifier
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_byte_writer_put_uint8 (&writer, metadata_descriptor->metadata_format);
|
||||||
|
if (metadata_descriptor->metadata_format ==
|
||||||
|
GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD) {
|
||||||
|
gst_byte_writer_put_uint32_be (&writer, metadata_descriptor->metadata_format_identifier); // metadata_format_identifier
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_byte_writer_put_uint8 (&writer, metadata_descriptor->metadata_service_id);
|
||||||
|
gst_byte_writer_put_uint8 (&writer, 0x0F); // decoder_config_flags = 000, DSM_CC_flag = 0, reserved = 1111
|
||||||
|
|
||||||
|
wr_size = gst_byte_writer_get_size (&writer);
|
||||||
|
add_info = gst_byte_writer_reset_and_get_data (&writer);
|
||||||
|
|
||||||
|
GstMpegtsDescriptor *descriptor =
|
||||||
|
_new_descriptor (GST_MTS_DESC_METADATA, wr_size);
|
||||||
|
memcpy (descriptor->data + 2, add_info, wr_size);
|
||||||
|
g_free (add_info);
|
||||||
|
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_mpegts_descriptor_parse_metadata:
|
||||||
|
* @descriptor: a %GST_TYPE_MPEGTS_METADATA_DESCRIPTOR #GstMpegtsDescriptor
|
||||||
|
* @res: (out) (transfer full): #GstMpegtsMetadataDescriptor
|
||||||
|
*
|
||||||
|
* Parses out the metadata descriptor from the @descriptor.
|
||||||
|
*
|
||||||
|
* See ISO/IEC 13818-1:2018 Section 2.6.60 and 2.6.61 for details.
|
||||||
|
* metadata_application_format is provided in Table 2-82. metadata_format is
|
||||||
|
* provided in Table 2-85.
|
||||||
|
*
|
||||||
|
* Returns: %TRUE if the parsing worked correctly, else %FALSE.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gst_mpegts_descriptor_parse_metadata (const GstMpegtsDescriptor * descriptor,
|
||||||
|
GstMpegtsMetadataDescriptor ** desc)
|
||||||
|
{
|
||||||
|
guint8 *data;
|
||||||
|
guint8 flag;
|
||||||
|
GstMpegtsMetadataDescriptor *res;
|
||||||
|
|
||||||
|
g_return_val_if_fail (descriptor != NULL && desc != NULL, FALSE);
|
||||||
|
__common_desc_checks (descriptor, GST_MTS_DESC_METADATA, 5, FALSE);
|
||||||
|
|
||||||
|
data = (guint8 *) descriptor->data + 2;
|
||||||
|
|
||||||
|
res = g_new0 (GstMpegtsMetadataDescriptor, 1);
|
||||||
|
|
||||||
|
res->metadata_application_format = GST_READ_UINT16_BE (data);
|
||||||
|
data += 2;
|
||||||
|
if (res->metadata_application_format == 0xFFFF) {
|
||||||
|
// skip over metadata_application_format_identifier if it is provided
|
||||||
|
data += 4;
|
||||||
|
}
|
||||||
|
res->metadata_format = *data;
|
||||||
|
data += 1;
|
||||||
|
if (res->metadata_format == GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD) {
|
||||||
|
res->metadata_format_identifier = GST_READ_UINT32_BE (data);
|
||||||
|
data += 4;
|
||||||
|
}
|
||||||
|
res->metadata_service_id = *data;
|
||||||
|
data += 1;
|
||||||
|
flag = *data;
|
||||||
|
res->decoder_config_flags = flag >> 5;
|
||||||
|
res->dsm_cc_flag = (flag & 0x10);
|
||||||
|
|
||||||
|
// There are more values if the dsm_cc_flag or decoder flags are set.
|
||||||
|
|
||||||
|
*desc = res;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_mpegts_descriptor_parse_metadata_std:
|
||||||
|
* @descriptor: a %GST_MTS_DESC_METADATA_STD #GstMpegtsDescriptor
|
||||||
|
* @metadata_input_leak_rate (out): the input leak rate in units of 400bits/sec.
|
||||||
|
* @metadata_buffer_size (out): the buffer size in units of 1024 bytes
|
||||||
|
* @metadata_output_leak_rate (out): the output leak rate in units of 400bits/sec.
|
||||||
|
*
|
||||||
|
* Extracts the metadata STD descriptor from @descriptor.
|
||||||
|
*
|
||||||
|
* See ISO/IEC 13818-1:2018 Section 2.6.62 and 2.6.63 for details.
|
||||||
|
*
|
||||||
|
* Returns: %TRUE if parsing succeeded, else %FALSE.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gst_mpegts_descriptor_parse_metadata_std (const GstMpegtsDescriptor *
|
||||||
|
descriptor,
|
||||||
|
guint32 * metadata_input_leak_rate,
|
||||||
|
guint32 * metadata_buffer_size, guint32 * metadata_output_leak_rate)
|
||||||
|
{
|
||||||
|
guint8 *data;
|
||||||
|
|
||||||
|
g_return_val_if_fail (descriptor != NULL && metadata_input_leak_rate != NULL
|
||||||
|
&& metadata_buffer_size != NULL
|
||||||
|
&& metadata_output_leak_rate != NULL, FALSE);
|
||||||
|
__common_desc_checks (descriptor, GST_MTS_DESC_METADATA_STD, 9, FALSE);
|
||||||
|
data = (guint8 *) descriptor->data + 2;
|
||||||
|
*metadata_input_leak_rate = GST_READ_UINT24_BE (data) & 0x3FFFFF;
|
||||||
|
data += 3;
|
||||||
|
*metadata_buffer_size = GST_READ_UINT24_BE (data) & 0x3FFFFF;
|
||||||
|
data += 3;
|
||||||
|
*metadata_output_leak_rate = GST_READ_UINT24_BE (data) & 0x3FFFFF;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_mpegts_pes_metadata_meta_init (GstMpegtsPESMetadataMeta * meta,
|
||||||
|
gpointer params, GstBuffer * buffer)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_mpegts_pes_metadata_meta_free (GstMpegtsPESMetadataMeta * meta,
|
||||||
|
GstBuffer * buffer)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_mpegts_pes_metadata_meta_transform (GstBuffer * dest, GstMeta * meta,
|
||||||
|
GstBuffer * buffer, GQuark type, gpointer data)
|
||||||
|
{
|
||||||
|
GstMpegtsPESMetadataMeta *source_meta, *dest_meta;
|
||||||
|
|
||||||
|
source_meta = (GstMpegtsPESMetadataMeta *) meta;
|
||||||
|
|
||||||
|
if (GST_META_TRANSFORM_IS_COPY (type)) {
|
||||||
|
GstMetaTransformCopy *copy = data;
|
||||||
|
if (!copy->region) {
|
||||||
|
dest_meta = gst_buffer_add_mpegts_pes_metadata_meta (dest);
|
||||||
|
if (!dest_meta)
|
||||||
|
return FALSE;
|
||||||
|
dest_meta->metadata_service_id = source_meta->metadata_service_id;
|
||||||
|
dest_meta->flags = source_meta->flags;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* return FALSE, if transform type is not supported */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_mpegts_pes_metadata_meta_api_get_type (void)
|
||||||
|
{
|
||||||
|
static GType type;
|
||||||
|
static const gchar *tags[] = { NULL };
|
||||||
|
|
||||||
|
if (g_once_init_enter (&type)) {
|
||||||
|
GType _type =
|
||||||
|
gst_meta_api_type_register ("GstMpegtsPESMetadataMetaAPI", tags);
|
||||||
|
g_once_init_leave (&type, _type);
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
const GstMetaInfo *
|
||||||
|
gst_mpegts_pes_metadata_meta_get_info (void)
|
||||||
|
{
|
||||||
|
static const GstMetaInfo *mpegts_pes_metadata_meta_info = NULL;
|
||||||
|
|
||||||
|
if (g_once_init_enter ((GstMetaInfo **) & mpegts_pes_metadata_meta_info)) {
|
||||||
|
const GstMetaInfo *meta =
|
||||||
|
gst_meta_register (GST_MPEGTS_PES_METADATA_META_API_TYPE,
|
||||||
|
"GstMpegtsPESMetadataMeta", sizeof (GstMpegtsPESMetadataMeta),
|
||||||
|
(GstMetaInitFunction) gst_mpegts_pes_metadata_meta_init,
|
||||||
|
(GstMetaFreeFunction) gst_mpegts_pes_metadata_meta_free,
|
||||||
|
(GstMetaTransformFunction) gst_mpegts_pes_metadata_meta_transform);
|
||||||
|
g_once_init_leave ((GstMetaInfo **) & mpegts_pes_metadata_meta_info,
|
||||||
|
(GstMetaInfo *) meta);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mpegts_pes_metadata_meta_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
GstMpegtsPESMetadataMeta *
|
||||||
|
gst_buffer_add_mpegts_pes_metadata_meta (GstBuffer * buffer)
|
||||||
|
{
|
||||||
|
GstMpegtsPESMetadataMeta *meta;
|
||||||
|
meta =
|
||||||
|
(GstMpegtsPESMetadataMeta *) gst_buffer_add_meta (buffer,
|
||||||
|
GST_MPEGTS_PES_METADATA_META_INFO, NULL);
|
||||||
|
return meta;
|
||||||
|
}
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
#ifndef GST_MPEGTS_DESCRIPTOR_H
|
#ifndef GST_MPEGTS_DESCRIPTOR_H
|
||||||
#define GST_MPEGTS_DESCRIPTOR_H
|
#define GST_MPEGTS_DESCRIPTOR_H
|
||||||
|
|
||||||
#include "gst-metadata-descriptor.h"
|
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <gst/mpegts/mpegts-prelude.h>
|
#include <gst/mpegts/mpegts-prelude.h>
|
||||||
|
|
||||||
@ -344,15 +343,6 @@ guint gst_mpegts_descriptor_parse_iso_639_language_nb (const GstMpegtsDescriptor
|
|||||||
GST_MPEGTS_API
|
GST_MPEGTS_API
|
||||||
GstMpegtsDescriptor * gst_mpegts_descriptor_from_iso_639_language (const gchar * language);
|
GstMpegtsDescriptor * gst_mpegts_descriptor_from_iso_639_language (const gchar * language);
|
||||||
|
|
||||||
GST_MPEGTS_API
|
|
||||||
gboolean gst_mpegts_descriptor_parse_metadata (const GstMpegtsDescriptor *descriptor, GstMpegtsMetadataDescriptor **res);
|
|
||||||
|
|
||||||
GST_MPEGTS_API
|
|
||||||
gboolean gst_mpegts_descriptor_parse_metadata_std (const GstMpegtsDescriptor *descriptor,
|
|
||||||
guint32 *metadata_input_leak_rate,
|
|
||||||
guint32 *metadata_buffer_size,
|
|
||||||
guint32 *metadata_output_leak_rate);
|
|
||||||
|
|
||||||
/* GST_MTS_DESC_DTG_LOGICAL_CHANNEL (0x83) */
|
/* GST_MTS_DESC_DTG_LOGICAL_CHANNEL (0x83) */
|
||||||
typedef struct _GstMpegtsLogicalChannelDescriptor GstMpegtsLogicalChannelDescriptor;
|
typedef struct _GstMpegtsLogicalChannelDescriptor GstMpegtsLogicalChannelDescriptor;
|
||||||
typedef struct _GstMpegtsLogicalChannel GstMpegtsLogicalChannel;
|
typedef struct _GstMpegtsLogicalChannel GstMpegtsLogicalChannel;
|
||||||
@ -396,6 +386,184 @@ GST_MPEGTS_API
|
|||||||
GstMpegtsDescriptor *
|
GstMpegtsDescriptor *
|
||||||
gst_mpegts_descriptor_from_custom_with_extension (guint8 tag, guint8 tag_extension, const guint8 *data, gsize length);
|
gst_mpegts_descriptor_from_custom_with_extension (guint8 tag, guint8 tag_extension, const guint8 *data, gsize length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstMpegtsMetadataFormat:
|
||||||
|
*
|
||||||
|
* metadata_descriptor metadata_format valid values. See ISO/IEC 13818-1:2018(E) Table 2-85.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* GST_MPEGTS_METADATA_FORMAT_TEM:
|
||||||
|
*
|
||||||
|
* ISO/IEC 15938-1 TeM.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
GST_MPEGTS_METADATA_FORMAT_TEM = 0x10,
|
||||||
|
/**
|
||||||
|
* GST_MPEGTS_METADATA_FORMAT_BIM:
|
||||||
|
*
|
||||||
|
* ISO/IEC 15938-1 BiM.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
GST_MPEGTS_METADATA_FORMAT_BIM = 0x11,
|
||||||
|
/**
|
||||||
|
* GST_MPEGTS_METADATA_FORMAT_APPLICATION_FORMAT:
|
||||||
|
*
|
||||||
|
* Defined by metadata application format.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
GST_MPEGTS_METADATA_FORMAT_APPLICATION_FORMAT = 0x3f,
|
||||||
|
/**
|
||||||
|
* GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD:
|
||||||
|
*
|
||||||
|
* Defined by metadata_format_identifier field.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD = 0xff
|
||||||
|
} GstMpegtsMetadataFormat;
|
||||||
|
|
||||||
|
/* MPEG-TS Metadata Descriptor (0x26) */
|
||||||
|
typedef struct _GstMpegtsMetadataDescriptor GstMpegtsMetadataDescriptor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstMpegtsMetadataDescriptor:
|
||||||
|
* @metadata_application_format: specifies the application responsible for defining usage, syntax and semantics
|
||||||
|
* @metadata_format: indicates the format and coding of the metadata
|
||||||
|
* @metadata_format_identifier: format identifier (equivalent to registration descriptor), for example 0x4B4C4641 ('KLVA') to indicate SMPTE 336 KLV.
|
||||||
|
* @metadata_service_id: metadata service to which this metadata descriptor applies, typically 0x00
|
||||||
|
* @decoder_config_flags: decoder flags, see ISO/IEC 13818-1:2018 Table 2-88.
|
||||||
|
* @dsm_cc_flag: true if stream associated with this descriptor is in an ISO/IEC 13818-6 data or object carousel.
|
||||||
|
*
|
||||||
|
* The metadata descriptor specifies parameters of a metadata service carried in an MPEG-2 Transport Stream (or Program Stream). The descriptor is included in the PMT in the descriptor loop for the elementary stream that carries the
|
||||||
|
metadata service. The descriptor specifies the format of the associated metadata, and contains the value of the
|
||||||
|
metadata_service_id to identify the metadata service to which the metadata descriptor applies.
|
||||||
|
*
|
||||||
|
* Note that this structure does not include all of the metadata_descriptor items, and will need extension to support DSM-CC and private data.
|
||||||
|
* See ISO/IEC 13818-1:2018 Section 2.6.60 and Section 2.6.61 for more information.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
struct _GstMpegtsMetadataDescriptor
|
||||||
|
{
|
||||||
|
guint16 metadata_application_format;
|
||||||
|
GstMpegtsMetadataFormat metadata_format;
|
||||||
|
guint32 metadata_format_identifier;
|
||||||
|
guint8 metadata_service_id;
|
||||||
|
guint8 decoder_config_flags;
|
||||||
|
gboolean dsm_cc_flag;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GST_TYPE_MPEGTS_METADATA_DESCRIPTOR:
|
||||||
|
*
|
||||||
|
* metadata_descriptor type
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
#define GST_TYPE_MPEGTS_METADATA_DESCRIPTOR (gst_mpegts_metadata_descriptor_get_type())
|
||||||
|
|
||||||
|
GST_MPEGTS_API
|
||||||
|
GType gst_mpegts_metadata_descriptor_get_type(void);
|
||||||
|
|
||||||
|
GST_MPEGTS_API
|
||||||
|
GstMpegtsDescriptor *gst_mpegts_descriptor_from_metadata(const GstMpegtsMetadataDescriptor *metadata_descriptor);
|
||||||
|
|
||||||
|
GST_MPEGTS_API
|
||||||
|
gboolean gst_mpegts_descriptor_parse_metadata(const GstMpegtsDescriptor *descriptor, GstMpegtsMetadataDescriptor **res);
|
||||||
|
|
||||||
|
GST_MPEGTS_API
|
||||||
|
gboolean gst_mpegts_descriptor_parse_metadata_std(const GstMpegtsDescriptor *descriptor,
|
||||||
|
guint32 *metadata_input_leak_rate,
|
||||||
|
guint32 *metadata_buffer_size,
|
||||||
|
guint32 *metadata_output_leak_rate);
|
||||||
|
|
||||||
|
typedef struct _GstMpegtsPESMetadataMeta GstMpegtsPESMetadataMeta;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_mpegts_pes_metadata_meta_api_get_type
|
||||||
|
*
|
||||||
|
* Return the #GType associated with #GstMpegtsPESMetadataMeta
|
||||||
|
*
|
||||||
|
* Returns: a #GType
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
GST_MPEGTS_API
|
||||||
|
GType gst_mpegts_pes_metadata_meta_api_get_type(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GST_MPEGTS_PES_METADATA_META_API_TYPE:
|
||||||
|
*
|
||||||
|
* The #GType associated with #GstMpegtsPESMetadataMeta.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
#define GST_MPEGTS_PES_METADATA_META_API_TYPE (gst_mpegts_pes_metadata_meta_api_get_type())
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GST_MPEGTS_PES_METADATA_META_INFO:
|
||||||
|
*
|
||||||
|
* The #GstMetaInfo associated with #GstMpegtsPESMetadataMeta.
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
#define GST_MPEGTS_PES_METADATA_META_INFO (gst_mpegts_pes_metadata_meta_get_info())
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_mpegts_pes_metadata_meta_get_info:
|
||||||
|
*
|
||||||
|
* Gets the global #GstMetaInfo describing the #GstMpegtsPESMetadataMeta meta.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): The #GstMetaInfo
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
GST_MPEGTS_API
|
||||||
|
const GstMetaInfo *gst_mpegts_pes_metadata_meta_get_info(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstMpegtsPESMetadataMeta:
|
||||||
|
* @meta: parent #GstMeta
|
||||||
|
* @metadata_service_id: metadata service identifier
|
||||||
|
* @flags: bit flags, see spec for details
|
||||||
|
*
|
||||||
|
* Extra buffer metadata describing the PES Metadata context.
|
||||||
|
* This is based on the Metadata AU cell header in
|
||||||
|
* ISO/IEC 13818-1:2018 Section 2.12.4.
|
||||||
|
*
|
||||||
|
* AU_cell_data_length is not provided, since it matches the length of the buffer
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
struct _GstMpegtsPESMetadataMeta
|
||||||
|
{
|
||||||
|
GstMeta meta;
|
||||||
|
guint8 metadata_service_id;
|
||||||
|
guint8 flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_buffer_add_mpegts_pes_metadata_meta:
|
||||||
|
* @buffer: a #GstBuffer
|
||||||
|
*
|
||||||
|
* Creates and adds a #GstMpegtsPESMetadataMeta to a @buffer.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): a newly created #GstMpegtsPESMetadataMeta
|
||||||
|
*
|
||||||
|
* Since: 1.24
|
||||||
|
*/
|
||||||
|
GST_MPEGTS_API
|
||||||
|
GstMpegtsPESMetadataMeta *
|
||||||
|
gst_buffer_add_mpegts_pes_metadata_meta(GstBuffer *buffer);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_MPEGTS_DESCRIPTOR_H */
|
#endif /* GST_MPEGTS_DESCRIPTOR_H */
|
||||||
|
@ -6,8 +6,6 @@ mpegts_sources = files(
|
|||||||
'gst-dvb-section.c',
|
'gst-dvb-section.c',
|
||||||
'gst-atsc-section.c',
|
'gst-atsc-section.c',
|
||||||
'gst-scte-section.c',
|
'gst-scte-section.c',
|
||||||
'gst-mpegtspesmetadatameta.c',
|
|
||||||
'gst-metadata-descriptor.c'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
mpegts_headers = files(
|
mpegts_headers = files(
|
||||||
@ -20,8 +18,6 @@ mpegts_headers = files(
|
|||||||
'gst-atsc-descriptor.h',
|
'gst-atsc-descriptor.h',
|
||||||
'gst-dvb-descriptor.h',
|
'gst-dvb-descriptor.h',
|
||||||
'gst-isdb-descriptor.h',
|
'gst-isdb-descriptor.h',
|
||||||
'gst-mpegtspesmetadatameta.h',
|
|
||||||
'gst-metadata-descriptor.h',
|
|
||||||
'mpegts-prelude.h',
|
'mpegts-prelude.h',
|
||||||
'mpegts.h',
|
'mpegts.h',
|
||||||
)
|
)
|
||||||
@ -47,7 +43,7 @@ gstmpegts = library('gstmpegts-' + api_version,
|
|||||||
soversion : soversion,
|
soversion : soversion,
|
||||||
darwin_versions : osxversion,
|
darwin_versions : osxversion,
|
||||||
install : true,
|
install : true,
|
||||||
dependencies : [gst_dep],
|
dependencies : [gst_dep, gstbase_dep],
|
||||||
)
|
)
|
||||||
|
|
||||||
library_def = {'lib': gstmpegts}
|
library_def = {'lib': gstmpegts}
|
||||||
|
@ -40,8 +40,6 @@
|
|||||||
#include <gst/mpegts/gst-scte-section.h>
|
#include <gst/mpegts/gst-scte-section.h>
|
||||||
#include <gst/mpegts/gstmpegts-enumtypes.h>
|
#include <gst/mpegts/gstmpegts-enumtypes.h>
|
||||||
#include <gst/mpegts/gst-hdmv-section.h>
|
#include <gst/mpegts/gst-hdmv-section.h>
|
||||||
#include <gst/mpegts/gst-mpegtspesmetadatameta.h>
|
|
||||||
#include <gst/mpegts/gst-metadata-descriptor.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user