--- a/gst_plugins_base/gst/subparse/gstssaparse.c Wed Mar 24 17:58:42 2010 -0500
+++ b/gst_plugins_base/gst/subparse/gstssaparse.c Wed Mar 24 18:04:17 2010 -0500
@@ -53,7 +53,6 @@
static gboolean gst_ssa_parse_sink_event (GstPad * pad, GstEvent * event);
static GstFlowReturn gst_ssa_parse_chain (GstPad * sinkpad, GstBuffer * buf);
-
static void
gst_ssa_parse_base_init (gpointer klass)
{
@@ -108,6 +107,7 @@
parse->ini = NULL;
parse->framed = FALSE;
+ parse->send_tags = FALSE;
}
static void
@@ -153,6 +153,7 @@
}
parse->framed = TRUE;
+ parse->send_tags = TRUE;
priv = (GstBuffer *) gst_value_get_mini_object (val);
g_return_val_if_fail (priv != NULL, FALSE);
@@ -305,11 +306,20 @@
if (G_UNLIKELY (!parse->framed))
goto not_framed;
+ if (G_UNLIKELY (parse->send_tags)) {
+ GstTagList *tags;
+
+ tags = gst_tag_list_new ();
+ gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_SUBTITLE_CODEC,
+ "SubStation Alpha", NULL);
+ gst_element_found_tags_for_pad (GST_ELEMENT (parse), parse->srcpad, tags);
+ parse->send_tags = FALSE;
+ }
+
/* make double-sure it's 0-terminated and all */
txt = g_strndup ((gchar *) GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
-
if (txt == NULL)
- return GST_FLOW_UNEXPECTED;
+ goto empty_text;
ts = GST_BUFFER_TIMESTAMP (buf);
ret = gst_ssa_parse_push_line (parse, txt, ts, GST_BUFFER_DURATION (buf));
@@ -321,6 +331,7 @@
ret = GST_FLOW_OK;
}
+ gst_buffer_unref (buf);
g_free (txt);
return ret;
@@ -330,8 +341,16 @@
{
GST_ELEMENT_ERROR (parse, STREAM, FORMAT, (NULL),
("Only SSA subtitles embedded in containers are supported"));
+ gst_buffer_unref (buf);
return GST_FLOW_NOT_NEGOTIATED;
}
+empty_text:
+ {
+ GST_ELEMENT_WARNING (parse, STREAM, FORMAT, (NULL),
+ ("Received empty subtitle"));
+ gst_buffer_unref (buf);
+ return GST_FLOW_OK;
+ }
}
static GstStateChangeReturn