summaryrefslogtreecommitdiff
path: root/ext/kate
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2013-04-15 00:48:36 +0100
committerTim-Philipp Müller <tim@centricular.net>2013-04-15 00:54:10 +0100
commit1dd53d64e8324b2e4537d5ebc6b9fec00b84dfaf (patch)
tree52e2ec7646b2beb70daa455b0faebbd7ae07d404 /ext/kate
parenta3ad6eaf2d8285e9af588a7a9d99d0e1de9daf94 (diff)
downloadgstreamer-plugins-bad-1dd53d64e8324b2e4537d5ebc6b9fec00b84dfaf.tar.gz
kate: only send decoder output caps once or when the format changes
and not for every single buffer. And also send a caps event for spu output. https://bugzilla.gnome.org/show_bug.cgi?id=697071
Diffstat (limited to 'ext/kate')
-rw-r--r--ext/kate/gstkatedec.c31
-rw-r--r--ext/kate/gstkatedec.h2
2 files changed, 25 insertions, 8 deletions
diff --git a/ext/kate/gstkatedec.c b/ext/kate/gstkatedec.c
index 1d20ce6d5..3d0a1822e 100644
--- a/ext/kate/gstkatedec.c
+++ b/ext/kate/gstkatedec.c
@@ -203,6 +203,7 @@ gst_kate_dec_init (GstKateDec * dec)
gst_kate_util_decode_base_init (&dec->decoder, TRUE);
dec->src_caps = NULL;
+ dec->output_format = GST_KATE_FORMAT_UNDEFINED;
dec->remove_markup = FALSE;
}
@@ -245,6 +246,7 @@ gst_kate_dec_get_property (GObject * object, guint prop_id,
static GstFlowReturn
gst_kate_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
+ GstKateFormat format = GST_KATE_FORMAT_UNDEFINED;
GstKateDec *kd = GST_KATE_DEC (parent);
const kate_event *ev = NULL;
GstFlowReturn rflow = GST_FLOW_OK;
@@ -294,15 +296,18 @@ gst_kate_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
buffer = gst_buffer_new_and_alloc (len + 1);
if (G_LIKELY (buffer)) {
GstCaps *caps;
- if (plain) {
+ if (plain)
+ format = GST_KATE_FORMAT_TEXT_UTF8;
+ else
+ format = GST_KATE_FORMAT_TEXT_PANGO_MARKUP;
+ if (format != kd->output_format) {
caps = gst_caps_new_simple ("text/x-raw", "format", G_TYPE_STRING,
- "utf8", NULL);
- } else {
- caps = gst_caps_new_simple ("text/x-raw", "format", G_TYPE_STRING,
- "pango-markup", NULL);
+ (format == GST_KATE_FORMAT_TEXT_UTF8) ? "utf8" : "pango-markup",
+ NULL);
+ gst_pad_push_event (kd->srcpad, gst_event_new_caps (caps));
+ gst_caps_unref (caps);
+ kd->output_format = format;
}
- gst_pad_push_event (kd->srcpad, gst_event_new_caps (caps));
- gst_caps_unref (caps);
/* allocate and copy the NULs, but don't include them in passed size */
gst_buffer_fill (buffer, 0, escaped, len + 1);
gst_buffer_resize (buffer, 0, len);
@@ -332,13 +337,23 @@ gst_kate_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
rflow = GST_FLOW_ERROR;
}
- // if there's a background paletted bitmap, construct a DVD SPU for it
+ /* if there's a background paletted bitmap, construct a DVD SPU for it */
if (ev->bitmap && ev->palette) {
GstBuffer *buffer = gst_kate_spu_encode_spu (kd, ev);
if (buffer) {
+ GstCaps *caps;
+
GST_BUFFER_TIMESTAMP (buffer) = ev->start_time * GST_SECOND;
GST_BUFFER_DURATION (buffer) =
(ev->end_time - ev->start_time) * GST_SECOND;
+
+ if (kd->output_format != GST_KATE_FORMAT_SPU) {
+ caps = gst_caps_new_empty_simple (GST_KATE_SPU_MIME_TYPE);
+ gst_pad_push_event (kd->srcpad, gst_event_new_caps (caps));
+ gst_caps_unref (caps);
+ kd->output_format = GST_KATE_FORMAT_SPU;
+ }
+
rflow = gst_pad_push (kd->srcpad, buffer);
if (rflow == GST_FLOW_NOT_LINKED) {
GST_DEBUG_OBJECT (kd, "source pad not linked, ignored");
diff --git a/ext/kate/gstkatedec.h b/ext/kate/gstkatedec.h
index 02c17b36d..2222811f1 100644
--- a/ext/kate/gstkatedec.h
+++ b/ext/kate/gstkatedec.h
@@ -74,6 +74,8 @@ struct _GstKateDec
GstCaps *src_caps;
+ GstKateFormat output_format;
+
gboolean remove_markup;
};