mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-06-01 19:02:18 +00:00
mpegtsmux: Changed caps to meta/x-id3, parsed=true
. Added application format enum
This commit is contained in:
parent
b06f2e781d
commit
4109281bd3
|
@ -1284,7 +1284,8 @@ gst_mpegts_descriptor_from_metadata (const GstMpegtsMetadataDescriptor *
|
|||
|
||||
gst_byte_writer_put_uint16_be (&writer,
|
||||
metadata_descriptor->metadata_application_format);
|
||||
if (metadata_descriptor->metadata_application_format == 0xFFFF) {
|
||||
if (metadata_descriptor->metadata_application_format ==
|
||||
GST_MPEGTS_METADATA_APPLICATION_FORMAT_IDENTIFIER_FIELD) {
|
||||
gst_byte_writer_put_uint32_be (&writer, metadata_descriptor->metadata_format_identifier); // metadata_application_format_identifier
|
||||
}
|
||||
|
||||
|
@ -1340,7 +1341,8 @@ gst_mpegts_descriptor_parse_metadata (const GstMpegtsDescriptor * descriptor,
|
|||
|
||||
res->metadata_application_format = GST_READ_UINT16_BE (data);
|
||||
data += 2;
|
||||
if (res->metadata_application_format == 0xFFFF) {
|
||||
if (res->metadata_application_format ==
|
||||
GST_MPEGTS_METADATA_APPLICATION_FORMAT_IDENTIFIER_FIELD) {
|
||||
// skip over metadata_application_format_identifier if it is provided
|
||||
data += 4;
|
||||
}
|
||||
|
@ -1516,7 +1518,8 @@ gst_mpegts_descriptor_from_metadata_pointer (const
|
|||
|
||||
gst_byte_writer_put_uint16_be (&writer,
|
||||
metadata_pointer_descriptor->metadata_application_format);
|
||||
if (metadata_pointer_descriptor->metadata_application_format == 0xFFFF) {
|
||||
if (metadata_pointer_descriptor->metadata_application_format ==
|
||||
GST_MPEGTS_METADATA_APPLICATION_FORMAT_IDENTIFIER_FIELD) {
|
||||
gst_byte_writer_put_uint32_be (&writer, metadata_pointer_descriptor->metadata_format_identifier); // metadata_application_format_identifier
|
||||
}
|
||||
|
||||
|
|
|
@ -429,6 +429,43 @@ typedef enum
|
|||
GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD = 0xff
|
||||
} GstMpegtsMetadataFormat;
|
||||
|
||||
/**
|
||||
* GstMepgtsMetadataApplicationFormat:
|
||||
*
|
||||
* metadata_application_format valid values. See ISO/IEC 13818-1:2023(E) Table 2-84.
|
||||
*
|
||||
* Since: 1.25
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
/**
|
||||
* GST_METADATA_APPLICATION_FORMAT_ISAN:
|
||||
*
|
||||
* ISO 15706-1 (ISAN) encoded in its binary form
|
||||
*
|
||||
* Since: 1.25
|
||||
*/
|
||||
GST_MPEGTS_METADATA_APPLICATION_FORMAT_ISAN = 0x0010,
|
||||
|
||||
/**
|
||||
* GST_METADATA_APPLICATION_FORMAT_VSAN:
|
||||
*
|
||||
* ISO 15706-2 (V-ISAN) encoded in its binary form
|
||||
*
|
||||
* Since: 1.25
|
||||
*/
|
||||
GST_MPEGTS_METADATA_APPLICATION_FORMAT_VSAN = 0x0011,
|
||||
|
||||
/**
|
||||
* GST_METADATA_APPLICATION_FORMAT_IDENTIFIER_FIELD:
|
||||
*
|
||||
* Defined by the metadata_application_format_identifier field
|
||||
*
|
||||
* Since: 1.25
|
||||
*/
|
||||
GST_MPEGTS_METADATA_APPLICATION_FORMAT_IDENTIFIER_FIELD = 0xffff,
|
||||
} GstMepgtsMetadataApplicationFormat;
|
||||
|
||||
/* MPEG-TS Metadata Descriptor (0x26) */
|
||||
typedef struct _GstMpegtsMetadataDescriptor GstMpegtsMetadataDescriptor;
|
||||
|
||||
|
@ -452,7 +489,7 @@ metadata_service_id to identify the metadata service to which the metadata descr
|
|||
*/
|
||||
struct _GstMpegtsMetadataDescriptor
|
||||
{
|
||||
guint16 metadata_application_format;
|
||||
GstMepgtsMetadataApplicationFormat metadata_application_format;
|
||||
GstMpegtsMetadataFormat metadata_format;
|
||||
guint32 metadata_format_identifier;
|
||||
guint8 metadata_service_id;
|
||||
|
@ -588,7 +625,7 @@ typedef struct _GstMpegtsMetadataPointerDescriptor
|
|||
*/
|
||||
struct _GstMpegtsMetadataPointerDescriptor
|
||||
{
|
||||
guint16 metadata_application_format;
|
||||
GstMepgtsMetadataApplicationFormat metadata_application_format;
|
||||
GstMpegtsMetadataFormat metadata_format;
|
||||
guint32 metadata_format_identifier;
|
||||
guint8 metadata_service_id;
|
||||
|
|
|
@ -239,5 +239,6 @@
|
|||
#define DRF_ID_OPUS 0x4f707573
|
||||
#define DRF_ID_EAC3 0x45414333 /* defined in A/52 Annex G */
|
||||
#define DRF_ID_AC4 0x41432D34 /* defined in ETSI TS 103 190-2 Annex D */
|
||||
#define DRF_ID_ID3 0x49443320
|
||||
|
||||
#endif /* __GST_MPEG_DESC_H__ */
|
||||
|
|
|
@ -674,7 +674,7 @@ gst_base_ts_mux_create_or_update_stream (GstBaseTsMux * mux,
|
|||
ts_pad->prepare_func = gst_base_ts_mux_prepare_opus;
|
||||
} else if (strcmp (mt, "meta/x-klv") == 0) {
|
||||
st = TSMUX_ST_PS_KLV;
|
||||
} else if (strcmp (mt, "application/x-metadata") == 0) {
|
||||
} else if (strcmp (mt, "meta/x-id3") == 0) {
|
||||
st = TSMUX_ST_PES_METADATA;
|
||||
} else if (strcmp (mt, "image/x-jpc") == 0) {
|
||||
/*
|
||||
|
@ -828,10 +828,6 @@ gst_base_ts_mux_create_or_update_stream (GstBaseTsMux * mux,
|
|||
gst_structure_get_int (s, "width", &ts_pad->stream->horizontal_size);
|
||||
gst_structure_get_int (s, "height", &ts_pad->stream->vertical_size);
|
||||
|
||||
// metadata caps
|
||||
gst_structure_get_uint (s, "metadata-format-identifier",
|
||||
&ts_pad->stream->metadata_format_identifier);
|
||||
|
||||
ts_pad->stream->color_spec = color_spec;
|
||||
ts_pad->stream->max_bitrate = max_rate;
|
||||
ts_pad->stream->profile_and_level = profile | main_level;
|
||||
|
|
|
@ -125,7 +125,7 @@ static GstStaticPadTemplate gst_mpeg_ts_mux_sink_factory =
|
|||
"audio/x-opus, "
|
||||
"channels = (int) [1, 255];"
|
||||
"subpicture/x-dvb; application/x-teletext; meta/x-klv, parsed=true;"
|
||||
"application/x-metadata;"
|
||||
"meta/x-id3, parsed=true;"
|
||||
"image/x-jpc, alignment = (string) frame, profile = (int)[0, 49151];"));
|
||||
|
||||
static GstStaticPadTemplate gst_mpeg_ts_mux_src_factory =
|
||||
|
|
|
@ -67,8 +67,9 @@
|
|||
|
||||
#include <string.h>
|
||||
|
||||
#include <gst/mpegts/mpegts.h>
|
||||
#include <gst/base/gstbytewriter.h>
|
||||
#include <gst/mpegts/mpegts.h>
|
||||
#include <gst/mpegtsdemux/gstmpegdesc.h>
|
||||
|
||||
#include "tsmux.h"
|
||||
#include "tsmuxstream.h"
|
||||
|
@ -1858,14 +1859,13 @@ tsmux_write_pmt (TsMux * mux, TsMuxProgram * program)
|
|||
for (i = 0; i < program->streams->len; i++) {
|
||||
TsMuxStream *stream = g_ptr_array_index (program->streams, i);
|
||||
|
||||
if (stream->is_application_metadata == TRUE) {
|
||||
// metadata_descriptor_pointer
|
||||
if (stream->is_id3_metadata == TRUE) {
|
||||
GstMpegtsMetadataPointerDescriptor metadata_pointer_descriptor;
|
||||
metadata_pointer_descriptor.metadata_application_format = 0xFFFF;
|
||||
metadata_pointer_descriptor.metadata_application_format =
|
||||
GST_MPEGTS_METADATA_APPLICATION_FORMAT_IDENTIFIER_FIELD;
|
||||
metadata_pointer_descriptor.metadata_format =
|
||||
GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD;
|
||||
metadata_pointer_descriptor.metadata_format_identifier =
|
||||
stream->metadata_format_identifier;
|
||||
metadata_pointer_descriptor.metadata_format_identifier = DRF_ID_ID3;
|
||||
metadata_pointer_descriptor.metadata_service_id = 0;
|
||||
metadata_pointer_descriptor.program_number = program->pgm_number;
|
||||
|
||||
|
|
|
@ -67,8 +67,9 @@
|
|||
|
||||
#include <string.h>
|
||||
|
||||
#include <gst/mpegts/mpegts.h>
|
||||
#include <gst/base/gstbytewriter.h>
|
||||
#include <gst/mpegts/mpegts.h>
|
||||
#include <gst/mpegtsdemux/gstmpegdesc.h>
|
||||
|
||||
#include "tsmuxcommon.h"
|
||||
#include "tsmuxstream.h"
|
||||
|
@ -223,8 +224,7 @@ tsmux_stream_new (guint16 pid, guint stream_type, guint stream_number)
|
|||
stream->id = 0xBD; // private stream
|
||||
stream->stream_type = TSMUX_ST_PES_METADATA;
|
||||
stream->is_meta = TRUE;
|
||||
stream->is_application_metadata = TRUE;
|
||||
stream->metadata_format_identifier = 0;
|
||||
stream->is_id3_metadata = TRUE;
|
||||
stream->pi.flags |= TSMUX_PACKET_FLAG_PES_FULL_HEADER |
|
||||
TSMUX_PACKET_FLAG_PES_DATA_ALIGNMENT;
|
||||
break;
|
||||
|
@ -928,29 +928,31 @@ tsmux_stream_default_get_es_descrs (TsMuxStream * stream,
|
|||
break;
|
||||
case TSMUX_ST_PES_METADATA:
|
||||
|
||||
// metadata_descriptor
|
||||
GstMpegtsMetadataDescriptor metadata_descriptor;
|
||||
if (stream->is_id3_metadata) {
|
||||
// metadata_descriptor
|
||||
GstMpegtsMetadataDescriptor metadata_descriptor;
|
||||
|
||||
metadata_descriptor.metadata_application_format = 0xFFFF;
|
||||
metadata_descriptor.metadata_format =
|
||||
GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD;
|
||||
metadata_descriptor.metadata_format_identifier =
|
||||
stream->metadata_format_identifier;
|
||||
metadata_descriptor.metadata_service_id = 0;
|
||||
metadata_descriptor.decoder_config_flags = 0x00;
|
||||
metadata_descriptor.dsm_cc_flag = FALSE;
|
||||
metadata_descriptor.metadata_application_format =
|
||||
GST_MPEGTS_METADATA_APPLICATION_FORMAT_IDENTIFIER_FIELD;
|
||||
metadata_descriptor.metadata_format =
|
||||
GST_MPEGTS_METADATA_FORMAT_IDENTIFIER_FIELD;
|
||||
metadata_descriptor.metadata_format_identifier = DRF_ID_ID3;
|
||||
metadata_descriptor.metadata_service_id = 0;
|
||||
metadata_descriptor.decoder_config_flags = 0x00;
|
||||
metadata_descriptor.dsm_cc_flag = FALSE;
|
||||
|
||||
descriptor = gst_mpegts_descriptor_from_metadata (&metadata_descriptor);
|
||||
g_ptr_array_add (pmt_stream->descriptors, descriptor);
|
||||
descriptor = gst_mpegts_descriptor_from_metadata (&metadata_descriptor);
|
||||
g_ptr_array_add (pmt_stream->descriptors, descriptor);
|
||||
|
||||
// registration_descriptor
|
||||
guint32 format_identifier = 0;
|
||||
GST_WRITE_UINT32_BE (&format_identifier,
|
||||
metadata_descriptor.metadata_format_identifier);
|
||||
// registration_descriptor
|
||||
guint32 format_identifier = 0;
|
||||
GST_WRITE_UINT32_BE (&format_identifier,
|
||||
metadata_descriptor.metadata_format_identifier);
|
||||
|
||||
descriptor = gst_mpegts_descriptor_from_registration ((const char *)
|
||||
&format_identifier, NULL, 0);
|
||||
g_ptr_array_add (pmt_stream->descriptors, descriptor);
|
||||
descriptor = gst_mpegts_descriptor_from_registration ((const char *)
|
||||
&format_identifier, NULL, 0);
|
||||
g_ptr_array_add (pmt_stream->descriptors, descriptor);
|
||||
}
|
||||
|
||||
break;
|
||||
case TSMUX_ST_PS_DVB_SUBPICTURE:
|
||||
|
|
|
@ -228,8 +228,7 @@ struct TsMuxStream {
|
|||
gboolean interlace_mode;
|
||||
guint8 color_spec;
|
||||
|
||||
gboolean is_application_metadata;
|
||||
guint32 metadata_format_identifier;
|
||||
gboolean is_id3_metadata;
|
||||
};
|
||||
|
||||
/* stream management */
|
||||
|
|
Loading…
Reference in a new issue