opt/gst-plugins-base/ffmpeg7.patch

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);