From 5e50cd507c7140e24dcff11f8cc8c2453ed11e5a Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Fri, 11 Oct 2013 10:29:20 +0200 Subject: tsdemux: Refactor language tag extraction subtitling descriptor needs to be used with a different method to extract language codes. --- gst/mpegtsdemux/tsdemux.c | 60 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 19 deletions(-) (limited to 'gst/mpegtsdemux/tsdemux.c') diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c index f4c5ff1df2..b4d97a61b8 100644 --- a/gst/mpegtsdemux/tsdemux.c +++ b/gst/mpegtsdemux/tsdemux.c @@ -673,42 +673,64 @@ done: return ret; } +static inline void +add_iso639_language_to_tags (TSDemuxStream * stream, gchar * lang_code) +{ + const gchar *lc; + + GST_LOG ("Add language code for stream: '%s'", lang_code); + + if (!stream->taglist) + stream->taglist = gst_tag_list_new_empty (); + + /* descriptor contains ISO 639-2 code, we want the ISO 639-1 code */ + lc = gst_tag_get_language_code (lang_code); + + /* Only set tag if we have a valid one */ + if (lc || (lang_code[0] && lang_code[1])) + gst_tag_list_add (stream->taglist, GST_TAG_MERGE_REPLACE, + GST_TAG_LANGUAGE_CODE, (lc) ? lc : lang_code, NULL); +} + static void gst_ts_demux_create_tags (TSDemuxStream * stream) { MpegTSBaseStream *bstream = (MpegTSBaseStream *) stream; const GstMpegTsDescriptor *desc = NULL; - int i; + int i, nb; desc = mpegts_get_descriptor_from_stream (bstream, GST_MTS_DESC_ISO_639_LANGUAGE); + if (desc) { + gchar lang_code[4]; + + nb = gst_mpegts_descriptor_parse_iso_639_language_nb (desc); - if (!desc) { - desc = - mpegts_get_descriptor_from_stream (bstream, - GST_MTS_DESC_DVB_SUBTITLING); + GST_DEBUG ("Found ISO 639 descriptor (%d entries)", nb); + + for (i = 0; i < nb; i++) + if (gst_mpegts_descriptor_parse_iso_639_language_idx (desc, i, &lang_code, + NULL)) + add_iso639_language_to_tags (stream, lang_code); + + return; } + desc = + mpegts_get_descriptor_from_stream (bstream, GST_MTS_DESC_DVB_SUBTITLING); + if (desc) { gchar lang_code[4]; - GstMpegTsIso639AudioType audio_type; - if (!stream->taglist) - stream->taglist = gst_tag_list_new_empty (); - - for (i = 0; gst_mpegts_descriptor_parse_iso_639_language_idx (desc, - i, &lang_code, &audio_type); i++) { + nb = gst_mpegts_descriptor_parse_dvb_subtitling_nb (desc); - const gchar *lc; + GST_DEBUG ("Found SUBTITLING descriptor (%d entries)", nb); - GST_LOG ("Add language code for stream: %s", lang_code); - - /* descriptor contains ISO 639-2 code, we want the ISO 639-1 code */ - lc = gst_tag_get_language_code (lang_code); - gst_tag_list_add (stream->taglist, GST_TAG_MERGE_REPLACE, - GST_TAG_LANGUAGE_CODE, (lc) ? lc : lang_code, NULL); - } + for (i = 0; i < nb; i++) + if (gst_mpegts_descriptor_parse_dvb_subtitling_idx (desc, i, &lang_code, + NULL, NULL, NULL)) + add_iso639_language_to_tags (stream, lang_code); } } -- cgit v1.2.3-70-g09d2