gst/matroska/: Recognise SSA/ASS and USF subtitle formats and set proper caps when...
authorTim-Philipp Müller <tim@centricular.net>
Sat, 18 Feb 2006 17:20:48 +0000 (17:20 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Sat, 18 Feb 2006 17:20:48 +0000 (17:20 +0000)
Original commit message from CVS:
* gst/matroska/matroska-demux.c:
(gst_matroska_demux_subtitle_caps),
(gst_matroska_demux_plugin_init):
* gst/matroska/matroska-ids.h:
Recognise SSA/ASS and USF subtitle formats and
set proper caps when they are found.

ChangeLog
gst/matroska/matroska-demux.c
gst/matroska/matroska-ids.h

index 5b31cfb..60aa63e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-02-18  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_subtitle_caps),
+       (gst_matroska_demux_plugin_init):
+       * gst/matroska/matroska-ids.h:
+         Recognise SSA/ASS and USF subtitle formats and
+         set proper caps when they are found.
+
 2006-02-17  Tim-Philipp Müller  <tim at centricular dot net>
 
        * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_decode_direct),
index b5cfd84..3882450 100644 (file)
@@ -3408,13 +3408,38 @@ gst_matroska_demux_subtitle_caps (GstMatroskaTrackSubtitleContext *
      (GstMatroskaTrackContext *) subtitlecontext; */
   GstCaps *caps = NULL;
 
+  /* for backwards compatibility */
+  if (!g_ascii_strcasecmp (codec_id, "S_TEXT/ASCII"))
+    codec_id = GST_MATROSKA_CODEC_ID_SUBTITLE_UTF8;
+  else if (!g_ascii_strcasecmp (codec_id, "S_SSA"))
+    codec_id = GST_MATROSKA_CODEC_ID_SUBTITLE_SSA;
+  else if (!g_ascii_strcasecmp (codec_id, "S_ASS"))
+    codec_id = GST_MATROSKA_CODEC_ID_SUBTITLE_ASS;
+  else if (!g_ascii_strcasecmp (codec_id, "S_USF"))
+    codec_id = GST_MATROSKA_CODEC_ID_SUBTITLE_USF;
+
   if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_UTF8)) {
     caps = gst_caps_new_simple ("text/plain", NULL);
+  } else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_SSA)) {
+    caps = gst_caps_new_simple ("application/x-ssa", NULL);
+  } else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_ASS)) {
+    caps = gst_caps_new_simple ("application/x-ass", NULL);
+  } else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_USF)) {
+    caps = gst_caps_new_simple ("application/x-usf", NULL);
   } else {
     GST_DEBUG ("Unknown subtitle stream: codec_id='%s'", codec_id);
     caps = gst_caps_new_simple ("application/x-subtitle-unknown", NULL);
   }
 
+  if (data != NULL && size > 0) {
+    GstBuffer *buf;
+
+    buf = gst_buffer_new_and_alloc (size);
+    memcpy (GST_BUFFER_DATA (buf), data, size);
+    gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, buf, NULL);
+    gst_buffer_unref (buf);
+  }
+
   return caps;
 }
 
@@ -3501,6 +3526,9 @@ gst_matroska_demux_plugin_init (GstPlugin * plugin)
   };
   const gchar *subtitle_id[] = {
     GST_MATROSKA_CODEC_ID_SUBTITLE_UTF8,
+    GST_MATROSKA_CODEC_ID_SUBTITLE_SSA,
+    GST_MATROSKA_CODEC_ID_SUBTITLE_ASS,
+    GST_MATROSKA_CODEC_ID_SUBTITLE_USF,
     /* FILLME */
     NULL
   };
index 906e489..71dfc63 100644 (file)
 /* TODO: AC3-9/10 (?), Musepack, Quicktime */
 
 #define GST_MATROSKA_CODEC_ID_SUBTITLE_UTF8      "S_TEXT/UTF8"
+#define GST_MATROSKA_CODEC_ID_SUBTITLE_SSA       "S_TEXT/SSA"
+#define GST_MATROSKA_CODEC_ID_SUBTITLE_ASS       "S_TEXT/ASS" 
+#define GST_MATROSKA_CODEC_ID_SUBTITLE_USF       "S_TEXT/USF"
 
 /*
  * Matrodka tags. Strings.