diff options
author | Zaheer Abbas Merali <zaheerabbas@merali.org> | 2008-01-22 18:04:04 +0000 |
---|---|---|
committer | Zaheer Abbas Merali <zaheerabbas@merali.org> | 2008-01-22 18:04:04 +0000 |
commit | 32b0966ec7b0dcbd8004f83ac75c3bd5eea011f8 (patch) | |
tree | e72f2cafe8c3257f5c313a0ab66871b6dbf8ef3b /gst/mpegtsparse/mpegtspacketizer.c | |
parent | 9b1dd1311d74a5c273517b8ae74070a407466c2c (diff) | |
download | gst-plugins-bad-32b0966ec7b0dcbd8004f83ac75c3bd5eea011f8.tar.gz gst-plugins-bad-32b0966ec7b0dcbd8004f83ac75c3bd5eea011f8.tar.bz2 gst-plugins-bad-32b0966ec7b0dcbd8004f83ac75c3bd5eea011f8.zip |
gst/mpegtsparse/: Added descriptor searching infrastructure from Fluendo TS demuxer.
Original commit message from CVS:
* gst/mpegtsparse/Makefile.am:
* gst/mpegtsparse/gstmpegdesc.c:
* gst/mpegtsparse/gstmpegdesc.h:
* gst/mpegtsparse/mpegtspacketizer.c:
* gst/mpegtsparse/mpegtsparse.c:
Added descriptor searching infrastructure from Fluendo TS demuxer.
Add channel name and provider to the sdt structure sent in the
bus message.
Diffstat (limited to 'gst/mpegtsparse/mpegtspacketizer.c')
-rw-r--r-- | gst/mpegtsparse/mpegtspacketizer.c | 36 |
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); } |