mpegts: add multilingual network name descriptor

https://bugzilla.gnome.org/show_bug.cgi?id=728429
This commit is contained in:
Stefan Ringel 2014-04-17 18:07:52 +02:00 committed by Edward Hervey
parent c56a4d54b8
commit b4cc5a2177
3 changed files with 75 additions and 0 deletions

View file

@ -327,6 +327,9 @@ gst_mpegts_descriptor_parse_dvb_service_list
gst_mpegts_descriptor_parse_dvb_stuffing
<SUBSECTION bouquet_name>
gst_mpegts_descriptor_parse_dvb_bouquet_name
<SUBSECTION multilingual_network_name>
GstMpegTsDvbMultilingualNetworkNameItem
gst_mpegts_descriptor_parse_dvb_multilingual_network_name
<SUBSECTION Standard>
GST_TYPE_MPEG_TSDVB_CODE_RATE
gst_mpegts_dvb_code_rate_get_type

View file

@ -1381,6 +1381,59 @@ gst_mpegts_descriptor_parse_terrestrial_delivery_system (const
return TRUE;
}
/* GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME (0x5B) */
static void
_gst_mpegts_dvb_multilingual_network_name_item_free
(GstMpegTsDvbMultilingualNetworkNameItem * item)
{
g_slice_free (GstMpegTsDvbMultilingualNetworkNameItem, item);
}
/**
* gst_mpegts_descriptor_parse_dvb_multilingual_network_name:
* @descriptor: a %GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME
* #GstMpegTsDescriptor
* @network_name_items: (out) (element-type GstMpegTsDvbMultilingualNetworkNameItem):
* a #GstMpegTsDvbMultilingualNetworkNameItem
*
* Parses out the multilingual network name from the @descriptor.
*
* Returns: %TRUE if the parsing happened correctly, else %FALSE.
*/
gboolean
gst_mpegts_descriptor_parse_dvb_multilingual_network_name (const
GstMpegTsDescriptor * descriptor, GPtrArray ** network_name_items)
{
guint8 *data, i, len;
GstMpegTsDvbMultilingualNetworkNameItem *item;
g_return_val_if_fail (descriptor != NULL && network_name_items != NULL,
FALSE);
__common_desc_checks (descriptor, GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME,
5, FALSE);
data = (guint8 *) descriptor->data + 2;
*network_name_items = g_ptr_array_new_with_free_func ((GDestroyNotify)
_gst_mpegts_dvb_multilingual_network_name_item_free);
for (i = 0; i < descriptor->length - 3;) {
item = g_slice_new0 (GstMpegTsDvbMultilingualNetworkNameItem);
g_ptr_array_add (*network_name_items, item);
memcpy (data, item->language_code, 3);
data += 3;
i += 3;
len = *data;
item->network_name =
get_encoding_and_convert ((const gchar *) data + 1, len);
data += len + 1;
i += len + 1;
}
return TRUE;
}
/* GST_MTS_DESC_DVB_PRIVATE_DATA_SPECIFIER (0x5F) */
/**
* gst_mpegts_descriptor_parse_dvb_private_data_specifier:

View file

@ -656,6 +656,25 @@ struct _GstMpegTsTerrestrialDeliverySystemDescriptor
gboolean gst_mpegts_descriptor_parse_terrestrial_delivery_system (const GstMpegTsDescriptor
*descriptor, GstMpegTsTerrestrialDeliverySystemDescriptor * res);
/* GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME (0x5B) */
typedef struct _GstMpegTsDvbMultilingualNetworkNameItem GstMpegTsDvbMultilingualNetworkNameItem;
/**
* GstMpegTsDvbMultilingualNetworkNameItem:
* @language_code: the ISO 639 language code
* @network_name: the network name
*
* a multilingual network name entry
*/
struct _GstMpegTsDvbMultilingualNetworkNameItem
{
gchar language_code[3];
gchar *network_name;
};
gboolean gst_mpegts_descriptor_parse_dvb_multilingual_network_name (const GstMpegTsDescriptor
*descriptor, GPtrArray ** network_name_items);
/* GST_MTS_DESC_DVB_PRIVATE_DATA_SPECIFIER (0x5F) */
gboolean gst_mpegts_descriptor_parse_dvb_private_data_specifier (const GstMpegTsDescriptor
* descriptor, guint32 * private_data_specifier, guint8 ** private_data,