typefindfunctions: add audio/audible typefinder
authorJonathan Matthew <jonathan@d14n.org>
Sat, 23 Nov 2013 01:36:43 +0000 (11:36 +1000)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 25 Nov 2014 00:55:50 +0000 (00:55 +0000)
https://bugzilla.gnome.org/show_bug.cgi?id=715050

gst/typefind/gsttypefindfunctions.c

index 3840a5b..8c5788e 100644 (file)
@@ -5325,6 +5325,29 @@ pva_type_find (GstTypeFind * tf, gpointer private)
     gst_type_find_suggest (tf, GST_TYPE_FIND_NEARLY_CERTAIN, PVA_CAPS);
 }
 
+/*** audio/audible ***/
+
+/* derived from pyaudibletags
+ * http://code.google.com/p/pyaudibletags/source/browse/trunk/pyaudibletags.py
+ */
+
+static GstStaticCaps aa_caps = GST_STATIC_CAPS ("audio/audible");
+
+#define AA_CAPS gst_static_caps_get(&aa_caps)
+
+static void
+aa_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data;
+
+  data = gst_type_find_peek (tf, 4, 4);
+  if (data == NULL)
+    return;
+
+  if (data[0] == 0x57 && data[1] == 0x90 && data[2] == 0x75 && data[3] == 0x36)
+    gst_type_find_suggest (tf, GST_TYPE_FIND_NEARLY_CERTAIN, AA_CAPS);
+}
+
 /*** generic typefind for streams that have some data at a specific position***/
 typedef struct
 {
@@ -5721,6 +5744,9 @@ plugin_init (GstPlugin * plugin)
   TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-xi", GST_RANK_SECONDARY,
       "xi", "Extended Instrument: ", 21, GST_TYPE_FIND_MAXIMUM);
 
+  TYPE_FIND_REGISTER (plugin, "audio/audible", GST_RANK_MARGINAL,
+      aa_type_find, "aa,aax", AA_CAPS, NULL, NULL);
+
   return TRUE;
 }