summaryrefslogtreecommitdiffstats
path: root/gst/mpegtsparse/mpegtspacketizer.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/mpegtsparse/mpegtspacketizer.c')
-rw-r--r--gst/mpegtsparse/mpegtspacketizer.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/gst/mpegtsparse/mpegtspacketizer.c b/gst/mpegtsparse/mpegtspacketizer.c
index 9b48a4f7..fafd3c9b 100644
--- a/gst/mpegtsparse/mpegtspacketizer.c
+++ b/gst/mpegtsparse/mpegtspacketizer.c
@@ -22,6 +22,7 @@
*/
#include "mpegtspacketizer.h"
+#include "gstmpegdesc.h"
GST_DEBUG_CATEGORY_STATIC (mpegts_packetizer_debug);
#define GST_CAT_DEFAULT mpegts_packetizer_debug
@@ -318,7 +319,7 @@ mpegts_packetizer_parse_descriptors (MpegTSPacketizer * packetizer,
/* include tag and length */
desc = g_string_new_len ((gchar *) data - 2, length + 2);
data += length;
-
+ /* G_TYPE_GSTING is a GBoxed type and is used so properly marshalled from python */
g_value_init (&value, G_TYPE_GSTRING);
g_value_take_boxed (&value, desc);
g_value_array_append (descriptors, &value);
@@ -808,6 +809,37 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer * packetizer,
gst_structure_free (service);
goto error;
}
+ guint8 *service_descriptor;
+ GstMPEGDescriptor *mpegdescriptor =
+ gst_mpeg_descriptor_parse (data, descriptors_loop_length);
+ service_descriptor =
+ gst_mpeg_descriptor_find (mpegdescriptor, DESC_DVB_SERVICE);
+ if (service_descriptor != NULL) {
+ guint serviceprovider_name_length =
+ DESC_DVB_SERVICE_provider_name_length (service_descriptor);
+ gchar *serviceprovider_name =
+ (gchar *) DESC_DVB_SERVICE_provider_name_text (service_descriptor);
+ guint servicename_length =
+ DESC_DVB_SERVICE_name_length (service_descriptor);
+ gchar *servicename =
+ (gchar *) DESC_DVB_SERVICE_name_text (service_descriptor);
+ if (servicename[0] < 0x20) {
+ servicename_length -= 1;
+ servicename += 1;
+ }
+ if (serviceprovider_name[0] < 0x20) {
+ serviceprovider_name_length -= 1;
+ serviceprovider_name += 1;
+ }
+
+ gst_structure_set (service, "name", G_TYPE_STRING,
+ g_strndup (servicename, servicename_length), NULL);
+ gst_structure_set (service, "provider-name", G_TYPE_STRING,
+ g_strndup (serviceprovider_name, serviceprovider_name_length),
+ NULL);
+ }
+
+ gst_mpeg_descriptor_free (mpegdescriptor);
descriptors = g_value_array_new (0);
if (!mpegts_packetizer_parse_descriptors (packetizer,
@@ -819,6 +851,8 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer * packetizer,
gst_structure_set (service, "descriptors", G_TYPE_VALUE_ARRAY,
descriptors, NULL);
+ /* get provider and service name from descriptors */
+
g_value_array_free (descriptors);
}