308 lines
12 KiB
Diff
308 lines
12 KiB
Diff
diff --git a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctions.c b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctions.c
|
|
index 805cb0a301b6..a10ef26028e8 100644
|
|
--- a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctions.c
|
|
+++ b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctions.c
|
|
@@ -5512,6 +5512,195 @@ tap_type_find (GstTypeFind * tf, gpointer unused)
|
|
}
|
|
}
|
|
|
|
+/*** audio/x-brstm ***/
|
|
+
|
|
+static GstStaticCaps brstm_caps = GST_STATIC_CAPS ("audio/x-brstm");
|
|
+
|
|
+#define BRSTM_CAPS (gst_static_caps_get(&brstm_caps))
|
|
+static void
|
|
+brstm_type_find (GstTypeFind * tf, gpointer unused)
|
|
+{
|
|
+ const guint8 *data = gst_type_find_peek (tf, 0, 8);
|
|
+
|
|
+ if (data) {
|
|
+ if (GST_READ_UINT32_LE (data) != GST_MAKE_FOURCC ('R', 'S', 'T', 'M'))
|
|
+ return;
|
|
+ if (GST_READ_UINT32_LE (data + 4) != 0xfffe
|
|
+ && GST_READ_UINT32_LE (data + 4) != 0xfeff)
|
|
+ return;
|
|
+ gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, BRSTM_CAPS);
|
|
+ }
|
|
+}
|
|
+
|
|
+/*** audio/x-bfstm ***/
|
|
+
|
|
+static GstStaticCaps bfstm_caps = GST_STATIC_CAPS ("audio/x-bfstm");
|
|
+
|
|
+#define BFSTM_CAPS (gst_static_caps_get(&bfstm_caps))
|
|
+static void
|
|
+bfstm_type_find (GstTypeFind * tf, gpointer unused)
|
|
+{
|
|
+ const guint8 *data = gst_type_find_peek (tf, 0, 8);
|
|
+
|
|
+ if (data) {
|
|
+ if (GST_READ_UINT32_LE (data) != GST_MAKE_FOURCC ('F', 'S', 'T', 'M') &&
|
|
+ GST_READ_UINT32_LE (data) != GST_MAKE_FOURCC ('C', 'S', 'T', 'M'))
|
|
+ return;
|
|
+ if (GST_READ_UINT32_LE (data + 4) != 0xfffe
|
|
+ && GST_READ_UINT32_LE (data + 4) != 0xfeff)
|
|
+ return;
|
|
+ gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, BFSTM_CAPS);
|
|
+ }
|
|
+}
|
|
+
|
|
+/*** audio/x-dsf ***/
|
|
+
|
|
+static GstStaticCaps dsf_caps = GST_STATIC_CAPS ("audio/x-dsf");
|
|
+
|
|
+#define DSF_CAPS (gst_static_caps_get(&dsf_caps))
|
|
+static void
|
|
+dsf_type_find (GstTypeFind * tf, gpointer unused)
|
|
+{
|
|
+ const guint8 *data = gst_type_find_peek (tf, 0, 12);
|
|
+
|
|
+ if (data) {
|
|
+ if (memcmp (data, "DSD ", 4) != 0)
|
|
+ return;
|
|
+ if (GST_READ_UINT64_BE (data + 4) == 28)
|
|
+ return;
|
|
+
|
|
+ gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, DSF_CAPS);
|
|
+ }
|
|
+}
|
|
+
|
|
+/*** video/x-ea ***/
|
|
+
|
|
+static GstStaticCaps ea_caps = GST_STATIC_CAPS ("video/x-ea");
|
|
+
|
|
+#define EA_CAPS (gst_static_caps_get(&ea_caps))
|
|
+static void
|
|
+ea_type_find (GstTypeFind * tf, gpointer unused)
|
|
+{
|
|
+ const guint8 *data = gst_type_find_peek (tf, 0, 8);
|
|
+
|
|
+ if (data) {
|
|
+ static const guint32 ea_fourccs[] = {
|
|
+ GST_MAKE_FOURCC ('I', 'S', 'N', 'h'),
|
|
+ GST_MAKE_FOURCC ('S', 'C', 'H', 'l'),
|
|
+ GST_MAKE_FOURCC ('S', 'E', 'A', 'D'),
|
|
+ GST_MAKE_FOURCC ('S', 'H', 'E', 'N'),
|
|
+ GST_MAKE_FOURCC ('k', 'V', 'G', 'T'),
|
|
+ GST_MAKE_FOURCC ('M', 'A', 'D', 'k'),
|
|
+ GST_MAKE_FOURCC ('M', 'P', 'C', 'h'),
|
|
+ GST_MAKE_FOURCC ('M', 'V', 'h', 'd'),
|
|
+ GST_MAKE_FOURCC ('M', 'V', 'I', 'h'),
|
|
+ GST_MAKE_FOURCC ('A', 'V', 'P', '6'),
|
|
+ };
|
|
+
|
|
+ guint32 fourcc = GST_READ_UINT32_LE (data);
|
|
+ gboolean found = FALSE;
|
|
+
|
|
+ for (gsize i = 0; i < G_N_ELEMENTS (ea_fourccs); i++) {
|
|
+ if (fourcc == ea_fourccs[i]) {
|
|
+ found = TRUE;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ if (!found)
|
|
+ return;
|
|
+
|
|
+ guint32 size = GST_READ_UINT32_LE (data + 4);
|
|
+ gboolean big_endian = size > 0x000fffff;
|
|
+ if (big_endian)
|
|
+ size = GUINT32_SWAP_LE_BE (size);
|
|
+ if (size > 0xfffff || size < 8)
|
|
+ return;
|
|
+
|
|
+ gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, EA_CAPS);
|
|
+ }
|
|
+}
|
|
+
|
|
+/*** video/x-film-cpk ***/
|
|
+
|
|
+static GstStaticCaps film_cpk_caps = GST_STATIC_CAPS ("video/x-film-cpk");
|
|
+
|
|
+#define FILM_CPK_CAPS (gst_static_caps_get(&film_cpk_caps))
|
|
+static void
|
|
+film_cpk_type_find (GstTypeFind * tf, gpointer unused)
|
|
+{
|
|
+ const guint8 *data = gst_type_find_peek (tf, 0, 20);
|
|
+
|
|
+ if (data) {
|
|
+ if (GST_READ_UINT32_LE (data) != GST_MAKE_FOURCC ('F', 'I', 'L', 'M'))
|
|
+ return;
|
|
+ if (GST_READ_UINT32_LE (data + 16) != GST_MAKE_FOURCC ('F', 'D', 'S', 'C'))
|
|
+ return;
|
|
+
|
|
+ gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, FILM_CPK_CAPS);
|
|
+ }
|
|
+}
|
|
+
|
|
+/*** application/gxf ***/
|
|
+
|
|
+static GstStaticCaps gxf_caps = GST_STATIC_CAPS ("application/gxf");
|
|
+
|
|
+#define GXF_CAPS (gst_static_caps_get(&gxf_caps))
|
|
+static void
|
|
+gxf_type_find (GstTypeFind * tf, gpointer unused)
|
|
+{
|
|
+ const guint8 *data = gst_type_find_peek (tf, 0, 16);
|
|
+
|
|
+ if (data) {
|
|
+ if (memcmp (data, "\x00\x00\x00\x00\x01\xbc", 6) != 0)
|
|
+ return;
|
|
+ if (memcmp (data + 10, "\x00\x00\x00\x00\xe1\xe2", 6) != 0)
|
|
+ return;
|
|
+ gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, GXF_CAPS);
|
|
+ }
|
|
+}
|
|
+
|
|
+/*** application/x-iff ***/
|
|
+
|
|
+static GstStaticCaps iff_caps = GST_STATIC_CAPS ("application/x-iff");
|
|
+
|
|
+#define IFF_CAPS (gst_static_caps_get(&iff_caps))
|
|
+static void
|
|
+iff_type_find (GstTypeFind * tf, gpointer unused)
|
|
+{
|
|
+ const guint8 *data = gst_type_find_peek (tf, 0, 16);
|
|
+
|
|
+ if (data) {
|
|
+ if (GST_READ_UINT32_LE (data) == GST_MAKE_FOURCC ('F', 'O', 'R', 'M') &&
|
|
+ (GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('8', 'S', 'V', 'X')
|
|
+ || GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('1', '6', 'S',
|
|
+ 'V')
|
|
+ || GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('M', 'A', 'U',
|
|
+ 'D')
|
|
+ || GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('P', 'B', 'M',
|
|
+ ' ')
|
|
+ || GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('A', 'C', 'B',
|
|
+ 'M')
|
|
+ || GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('D', 'E', 'E',
|
|
+ 'P')
|
|
+ || GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('I', 'L', 'B',
|
|
+ 'M')
|
|
+ || GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('R', 'G', 'B',
|
|
+ '8')
|
|
+ || GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('A', 'N', 'I',
|
|
+ 'M')
|
|
+ || GST_READ_UINT32_LE (data + 8) == GST_MAKE_FOURCC ('R', 'G', 'B',
|
|
+ 'N'))) {
|
|
+ return gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, IFF_CAPS);
|
|
+ }
|
|
+
|
|
+ if (GST_READ_UINT32_LE (data) == GST_MAKE_FOURCC ('F', 'R', 'M', '8')
|
|
+ && GST_READ_UINT32_LE (data + 12) == GST_MAKE_FOURCC ('D', 'S', 'D',
|
|
+ ' ')) {
|
|
+ return gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, IFF_CAPS);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
/*** video/vivo ***/
|
|
|
|
static GstStaticCaps vivo_caps = GST_STATIC_CAPS ("video/vivo");
|
|
@@ -6212,3 +6401,17 @@ GST_TYPE_FIND_REGISTER_DEFINE (aa, "audio/audible", GST_RANK_MARGINAL,
|
|
aa_type_find, "aa,aax", AA_CAPS, NULL, NULL);
|
|
GST_TYPE_FIND_REGISTER_DEFINE (tap, "audio/x-tap-tap", GST_RANK_PRIMARY,
|
|
tap_type_find, "tap", TAP_CAPS, NULL, NULL);
|
|
+GST_TYPE_FIND_REGISTER_DEFINE (brstm, "audio/x-brstm", GST_RANK_SECONDARY,
|
|
+ brstm_type_find, "brstm", BRSTM_CAPS, NULL, NULL);
|
|
+GST_TYPE_FIND_REGISTER_DEFINE (bfstm, "audio/x-bfstm", GST_RANK_SECONDARY,
|
|
+ bfstm_type_find, "bfstm,bcstm", BFSTM_CAPS, NULL, NULL);
|
|
+GST_TYPE_FIND_REGISTER_DEFINE (dsf, "audio/x-dsf", GST_RANK_PRIMARY,
|
|
+ dsf_type_find, NULL, DSF_CAPS, NULL, NULL);
|
|
+GST_TYPE_FIND_REGISTER_DEFINE (ea, "video/x-ea", GST_RANK_SECONDARY,
|
|
+ ea_type_find, NULL, EA_CAPS, NULL, NULL);
|
|
+GST_TYPE_FIND_REGISTER_DEFINE (film_cpk, "video/x-film-cpk", GST_RANK_SECONDARY,
|
|
+ film_cpk_type_find, "cpk", FILM_CPK_CAPS, NULL, NULL);
|
|
+GST_TYPE_FIND_REGISTER_DEFINE (gxf, "application/gxf", GST_RANK_SECONDARY,
|
|
+ gxf_type_find, NULL, GXF_CAPS, NULL, NULL);
|
|
+GST_TYPE_FIND_REGISTER_DEFINE (iff, "application/x-iff", GST_RANK_SECONDARY,
|
|
+ iff_type_find, NULL, IFF_CAPS, NULL, NULL);
|
|
diff --git a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsplugin.c b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsplugin.c
|
|
index c0e386aa2a28..998cfd4cf7fa 100644
|
|
--- a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsplugin.c
|
|
+++ b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsplugin.c
|
|
@@ -42,15 +42,18 @@ plugin_init (GstPlugin * plugin)
|
|
/* must use strings, macros don't accept initializers */
|
|
|
|
/*Riff Type find register */
|
|
+ GST_TYPE_FIND_REGISTER (fourxm, plugin);
|
|
GST_TYPE_FIND_REGISTER (avi, plugin);
|
|
GST_TYPE_FIND_REGISTER (qcp, plugin);
|
|
GST_TYPE_FIND_REGISTER (cdxa, plugin);
|
|
GST_TYPE_FIND_REGISTER (riff_mid, plugin);
|
|
GST_TYPE_FIND_REGISTER (wav, plugin);
|
|
GST_TYPE_FIND_REGISTER (webp, plugin);
|
|
+ GST_TYPE_FIND_REGISTER (xwma, plugin);
|
|
|
|
/*'Start with' Type find register */
|
|
GST_TYPE_FIND_REGISTER (asf, plugin);
|
|
+ GST_TYPE_FIND_REGISTER (avs, plugin);
|
|
GST_TYPE_FIND_REGISTER (vcd, plugin);
|
|
GST_TYPE_FIND_REGISTER (imelody, plugin);
|
|
GST_TYPE_FIND_REGISTER (scc, plugin);
|
|
@@ -203,6 +206,13 @@ plugin_init (GstPlugin * plugin)
|
|
GST_TYPE_FIND_REGISTER (pva, plugin);
|
|
GST_TYPE_FIND_REGISTER (aa, plugin);
|
|
GST_TYPE_FIND_REGISTER (tap, plugin);
|
|
+ GST_TYPE_FIND_REGISTER (brstm, plugin);
|
|
+ GST_TYPE_FIND_REGISTER (bfstm, plugin);
|
|
+ GST_TYPE_FIND_REGISTER (dsf, plugin);
|
|
+ GST_TYPE_FIND_REGISTER (ea, plugin);
|
|
+ GST_TYPE_FIND_REGISTER (film_cpk, plugin);
|
|
+ GST_TYPE_FIND_REGISTER (gxf, plugin);
|
|
+ GST_TYPE_FIND_REGISTER (iff, plugin);
|
|
|
|
return TRUE;
|
|
}
|
|
diff --git a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsplugin.h b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsplugin.h
|
|
index 0dfbc700b00b..1ef0eff272a3 100644
|
|
--- a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsplugin.h
|
|
+++ b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsplugin.h
|
|
@@ -41,9 +41,12 @@ GST_TYPE_FIND_REGISTER_DECLARE (cdxa);
|
|
GST_TYPE_FIND_REGISTER_DECLARE (riff_mid);
|
|
GST_TYPE_FIND_REGISTER_DECLARE (wav);
|
|
GST_TYPE_FIND_REGISTER_DECLARE (webp);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (fourxm);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (xwma);
|
|
|
|
/*'Start with' type find declaration */
|
|
GST_TYPE_FIND_REGISTER_DECLARE (asf);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (avs);
|
|
GST_TYPE_FIND_REGISTER_DECLARE (vcd);
|
|
GST_TYPE_FIND_REGISTER_DECLARE (imelody);
|
|
GST_TYPE_FIND_REGISTER_DECLARE (scc);
|
|
@@ -195,5 +198,12 @@ GST_TYPE_FIND_REGISTER_DECLARE (ssa);
|
|
GST_TYPE_FIND_REGISTER_DECLARE (pva);
|
|
GST_TYPE_FIND_REGISTER_DECLARE (aa);
|
|
GST_TYPE_FIND_REGISTER_DECLARE (tap);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (brstm);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (bfstm);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (dsf);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (ea);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (film_cpk);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (gxf);
|
|
+GST_TYPE_FIND_REGISTER_DECLARE (iff);
|
|
|
|
#endif //__GST_TYPE_FIND_FUNCTIONS_PLUGIN_H__
|
|
diff --git a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsriff.c b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsriff.c
|
|
index ba5521961102..98823c437000 100644
|
|
--- a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsriff.c
|
|
+++ b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsriff.c
|
|
@@ -81,3 +81,7 @@ TYPE_FIND_REGISTER_RIFF_DEFINE (wav, "audio/x-wav", GST_RANK_PRIMARY, "wav",
|
|
"WAVE");
|
|
TYPE_FIND_REGISTER_RIFF_DEFINE (webp, "image/webp", GST_RANK_PRIMARY,
|
|
"webp", "WEBP");
|
|
+TYPE_FIND_REGISTER_RIFF_DEFINE (fourxm, "video/x-4xm", GST_RANK_PRIMARY,
|
|
+ NULL, "4XMV");
|
|
+TYPE_FIND_REGISTER_RIFF_DEFINE (xwma, "audio/x-xwma", GST_RANK_PRIMARY,
|
|
+ NULL, "XWMA");
|
|
diff --git a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsstartwith.c b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsstartwith.c
|
|
index 6109e9c9ab54..b65a6827a867 100644
|
|
--- a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsstartwith.c
|
|
+++ b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsstartwith.c
|
|
@@ -177,3 +177,5 @@ TYPE_FIND_REGISTER_START_WITH_DEFINE (xi, "audio/x-xi", GST_RANK_SECONDARY,
|
|
"xi", "Extended Instrument: ", 21, GST_TYPE_FIND_MAXIMUM);
|
|
TYPE_FIND_REGISTER_START_WITH_DEFINE (dmp, "audio/x-tap-dmp",
|
|
GST_RANK_SECONDARY, "dmp", "DC2N-TAP-RAW", 12, GST_TYPE_FIND_LIKELY);
|
|
+TYPE_FIND_REGISTER_START_WITH_DEFINE (avs, "video/x-avs",
|
|
+ GST_RANK_SECONDARY, NULL, "wW\x10\x00", 4, GST_TYPE_FIND_LIKELY);
|