subparse: Add typefinder for LRC subtitles

This commit is contained in:
Sebastian Dröge 2013-12-18 15:07:47 +01:00
parent 7a7ae7d5f4
commit bc2342e4ad
2 changed files with 37 additions and 1 deletions

View file

@ -1287,6 +1287,34 @@ gst_sub_parse_data_format_autodetect (gchar * match_str)
GST_LOG ("QTtext (time based) format detected"); GST_LOG ("QTtext (time based) format detected");
return GST_SUB_PARSE_FORMAT_QTTEXT; return GST_SUB_PARSE_FORMAT_QTTEXT;
} }
/* We assume the LRC file starts immediately */
if (match_str[0] == '[') {
gboolean all_lines_good = TRUE;
gchar **split;
gchar **ptr;
ptr = split = g_strsplit (match_str, "\n", -1);
while (*ptr && *(ptr + 1)) {
gchar *str = *ptr;
gint len = strlen (str);
if (sscanf (str, "[%u:%02u.%02u]", &n1, &n2, &n3) == 3 ||
sscanf (str, "[%u:%02u.%03u]", &n1, &n2, &n3) == 3) {
all_lines_good = TRUE;
} else if (str[len - 1] == ']' && strchr (str, ':') != NULL) {
all_lines_good = TRUE;
} else {
all_lines_good = FALSE;
break;
}
ptr++;
}
g_strfreev (split);
if (all_lines_good)
return GST_SUB_PARSE_FORMAT_LRC;
}
GST_DEBUG ("no subtitle format detected"); GST_DEBUG ("no subtitle format detected");
return GST_SUB_PARSE_FORMAT_UNKNOWN; return GST_SUB_PARSE_FORMAT_UNKNOWN;
@ -1672,6 +1700,9 @@ static GstStaticCaps qttext_caps =
GST_STATIC_CAPS ("application/x-subtitle-qttext"); GST_STATIC_CAPS ("application/x-subtitle-qttext");
#define QTTEXT_CAPS (gst_static_caps_get (&qttext_caps)) #define QTTEXT_CAPS (gst_static_caps_get (&qttext_caps))
static GstStaticCaps lrc_caps = GST_STATIC_CAPS ("application/x-subtitle-lrc");
#define LRC_CAPS (gst_static_caps_get (&lrc_caps))
static void static void
gst_subparse_type_find (GstTypeFind * tf, gpointer private) gst_subparse_type_find (GstTypeFind * tf, gpointer private)
{ {
@ -1772,6 +1803,10 @@ gst_subparse_type_find (GstTypeFind * tf, gpointer private)
GST_DEBUG ("QTtext format detected"); GST_DEBUG ("QTtext format detected");
caps = QTTEXT_CAPS; caps = QTTEXT_CAPS;
break; break;
case GST_SUB_PARSE_FORMAT_LRC:
GST_DEBUG ("LRC format detected");
caps = LRC_CAPS;
break;
default: default:
case GST_SUB_PARSE_FORMAT_UNKNOWN: case GST_SUB_PARSE_FORMAT_UNKNOWN:
GST_DEBUG ("no subtitle format detected"); GST_DEBUG ("no subtitle format detected");

View file

@ -55,7 +55,8 @@ typedef enum
GST_SUB_PARSE_FORMAT_MPL2 = 6, GST_SUB_PARSE_FORMAT_MPL2 = 6,
GST_SUB_PARSE_FORMAT_SUBVIEWER = 7, GST_SUB_PARSE_FORMAT_SUBVIEWER = 7,
GST_SUB_PARSE_FORMAT_DKS = 8, GST_SUB_PARSE_FORMAT_DKS = 8,
GST_SUB_PARSE_FORMAT_QTTEXT = 9 GST_SUB_PARSE_FORMAT_QTTEXT = 9,
GST_SUB_PARSE_FORMAT_LRC = 10
} GstSubParseFormat; } GstSubParseFormat;
typedef struct { typedef struct {