mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-04 05:22:30 +00:00
example: ts-parser: add linkage descriptor
https://bugzilla.gnome.org/show_bug.cgi?id=730901
This commit is contained in:
parent
f6fdd83b7e
commit
1db9d6c9df
1 changed files with 119 additions and 0 deletions
|
@ -77,6 +77,21 @@ dump_memory_content (GstMpegTsDescriptor * desc, guint spacing)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dump_memory_bytes (guint8 * data, guint len, guint spacing)
|
||||||
|
{
|
||||||
|
gsize off = 0;
|
||||||
|
|
||||||
|
while (off < len) {
|
||||||
|
gchar buf[128];
|
||||||
|
|
||||||
|
/* gst_info_dump_mem_line will process 16 bytes at most */
|
||||||
|
gst_info_dump_mem_line (buf, sizeof (buf), data, off, len - off);
|
||||||
|
g_printf ("%*s %s\n", spacing, "", buf);
|
||||||
|
off += 16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const gchar *
|
static const gchar *
|
||||||
descriptor_name (gint val)
|
descriptor_name (gint val)
|
||||||
{
|
{
|
||||||
|
@ -306,6 +321,105 @@ dump_multiligual_component (GstMpegTsDescriptor * desc, guint spacing)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dump_linkage (GstMpegTsDescriptor * desc, guint spacing)
|
||||||
|
{
|
||||||
|
GstMpegTsDVBLinkageDescriptor res;
|
||||||
|
|
||||||
|
res.private_data_length = 0;
|
||||||
|
res.private_data_bytes = NULL;
|
||||||
|
|
||||||
|
if (gst_mpegts_descriptor_parse_dvb_linkage (desc, &res)) {
|
||||||
|
g_printf ("%*s Linkage Descriptor : 0x%02x (%s)\n", spacing, "",
|
||||||
|
res.linkage_type, enum_name (GST_TYPE_MPEG_TS_DVB_LINKAGE_TYPE,
|
||||||
|
res.linkage_type));
|
||||||
|
|
||||||
|
g_printf ("%*s Transport Stream ID : 0x%04x\n", spacing, "",
|
||||||
|
res.transport_stream_id);
|
||||||
|
g_printf ("%*s Original Network ID : 0x%04x\n", spacing, "",
|
||||||
|
res.original_network_id);
|
||||||
|
g_printf ("%*s Service ID : 0x%04x\n", spacing, "",
|
||||||
|
res.service_id);
|
||||||
|
|
||||||
|
switch (res.linkage_type) {
|
||||||
|
case GST_MPEGTS_DVB_LINKAGE_MOBILE_HAND_OVER:
|
||||||
|
{
|
||||||
|
GstMpegTsDVBLinkageMobileHandOver *linkage =
|
||||||
|
(GstMpegTsDVBLinkageMobileHandOver *) res.linkage_data;
|
||||||
|
g_printf ("%*s hand_over_type : 0x%02x (%s)\n", spacing,
|
||||||
|
"", linkage->hand_over_type,
|
||||||
|
enum_name (GST_TYPE_MPEG_TS_DVB_LINKAGE_HAND_OVER_TYPE,
|
||||||
|
linkage->hand_over_type));
|
||||||
|
g_printf ("%*s origin_type : %s\n", spacing, "",
|
||||||
|
linkage->origin_type ? "SDT" : "NIT");
|
||||||
|
g_printf ("%*s network_id : 0x%04x\n", spacing, "",
|
||||||
|
linkage->network_id);
|
||||||
|
g_printf ("%*s initial_service_id: 0x%04x\n", spacing, "",
|
||||||
|
linkage->initial_service_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GST_MPEGTS_DVB_LINKAGE_EVENT:
|
||||||
|
{
|
||||||
|
GstMpegTsDVBLinkageEvent *linkage =
|
||||||
|
(GstMpegTsDVBLinkageEvent *) res.linkage_data;
|
||||||
|
g_printf ("%*s target_event_id : 0x%04x\n", spacing, "",
|
||||||
|
linkage->target_event_id);
|
||||||
|
g_printf ("%*s target_listed : %s\n", spacing, "",
|
||||||
|
linkage->target_listed ? "TRUE" : "FALSE");
|
||||||
|
g_printf ("%*s event_simulcast : %s\n", spacing, "",
|
||||||
|
linkage->event_simulcast ? "TRUE" : "FALSE");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GST_MPEGTS_DVB_LINKAGE_EXTENDED_EVENT:
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
GPtrArray *items = (GPtrArray *) res.linkage_data;
|
||||||
|
|
||||||
|
for (i = 0; i < items->len; i++) {
|
||||||
|
GstMpegTsDVBLinkageExtendedEvent *linkage =
|
||||||
|
g_ptr_array_index (items, i);
|
||||||
|
g_printf ("%*s target_event_id : 0x%04x\n", spacing, "",
|
||||||
|
linkage->target_event_id);
|
||||||
|
g_printf ("%*s target_listed : %s\n", spacing, "",
|
||||||
|
linkage->target_listed ? "TRUE" : "FALSE");
|
||||||
|
g_printf ("%*s event_simulcast : %s\n", spacing, "",
|
||||||
|
linkage->event_simulcast ? "TRUE" : "FALSE");
|
||||||
|
g_printf ("%*s link_type : 0x%01x\n", spacing, "",
|
||||||
|
linkage->link_type);
|
||||||
|
g_printf ("%*s target_id_type : 0x%01x\n", spacing, "",
|
||||||
|
linkage->target_id_type);
|
||||||
|
g_printf ("%*s original_network_id_flag : %s\n", spacing, "",
|
||||||
|
linkage->original_network_id_flag ? "TRUE" : "FALSE");
|
||||||
|
g_printf ("%*s service_id_flag : %s\n", spacing, "",
|
||||||
|
linkage->service_id_flag ? "TRUE" : "FALSE");
|
||||||
|
if (linkage->target_id_type == 3) {
|
||||||
|
g_printf ("%*s user_defined_id : 0x%02x\n", spacing, "",
|
||||||
|
linkage->user_defined_id);
|
||||||
|
} else {
|
||||||
|
if (linkage->target_id_type == 1)
|
||||||
|
g_printf ("%*s target_transport_stream_id : 0x%04x\n",
|
||||||
|
spacing, "", linkage->target_transport_stream_id);
|
||||||
|
if (linkage->original_network_id_flag)
|
||||||
|
g_printf ("%*s target_original_network_id : 0x%04x\n",
|
||||||
|
spacing, "", linkage->target_original_network_id);
|
||||||
|
if (linkage->service_id_flag)
|
||||||
|
g_printf ("%*s target_service_id : 0x%04x\n",
|
||||||
|
spacing, "", linkage->target_service_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (res.private_data_length > 0) {
|
||||||
|
dump_memory_bytes (res.private_data_bytes, res.private_data_length,
|
||||||
|
spacing + 2);
|
||||||
|
g_free ((gpointer) res.private_data_bytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dump_iso_639_language (GstMpegTsDescriptor * desc, guint spacing)
|
dump_iso_639_language (GstMpegTsDescriptor * desc, guint spacing)
|
||||||
{
|
{
|
||||||
|
@ -457,6 +571,9 @@ dump_descriptors (GPtrArray * descriptors, guint spacing)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GST_MTS_DESC_DVB_LINKAGE:
|
||||||
|
dump_linkage (desc, spacing + 2);
|
||||||
|
break;
|
||||||
case GST_MTS_DESC_ISO_639_LANGUAGE:
|
case GST_MTS_DESC_ISO_639_LANGUAGE:
|
||||||
dump_iso_639_language (desc, spacing + 2);
|
dump_iso_639_language (desc, spacing + 2);
|
||||||
break;
|
break;
|
||||||
|
@ -994,6 +1111,8 @@ main (int argc, gchar ** argv)
|
||||||
g_type_class_ref (GST_TYPE_MPEG_TS_TERRESTRIAL_TRANSMISSION_MODE);
|
g_type_class_ref (GST_TYPE_MPEG_TS_TERRESTRIAL_TRANSMISSION_MODE);
|
||||||
g_type_class_ref (GST_TYPE_MPEG_TS_TERRESTRIAL_GUARD_INTERVAL);
|
g_type_class_ref (GST_TYPE_MPEG_TS_TERRESTRIAL_GUARD_INTERVAL);
|
||||||
g_type_class_ref (GST_TYPE_MPEG_TS_TERRESTRIAL_HIERARCHY);
|
g_type_class_ref (GST_TYPE_MPEG_TS_TERRESTRIAL_HIERARCHY);
|
||||||
|
g_type_class_ref (GST_TYPE_MPEG_TS_DVB_LINKAGE_TYPE);
|
||||||
|
g_type_class_ref (GST_TYPE_MPEG_TS_DVB_LINKAGE_HAND_OVER_TYPE);
|
||||||
|
|
||||||
mainloop = g_main_loop_new (NULL, FALSE);
|
mainloop = g_main_loop_new (NULL, FALSE);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue