From 37a744889c8226001864a7c42b355e412671febd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 23 Oct 2021 14:31:59 +0300 Subject: [PATCH] typefindfunctions: Add various CMAF brands to the MP4 typefinder Part-of: --- .../gst/typefind/gsttypefindfunctions.c | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctions.c b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctions.c index fcba8be..38705e8 100644 --- a/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctions.c +++ b/subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctions.c @@ -3412,6 +3412,27 @@ qt_type_find (GstTypeFind * tf, gpointer unused) guint64 size; const gchar *variant = NULL; static const gchar *qt_brands[] = { "qt " }; + static const gchar *cmaf_brands[] = { + "cmf2", + "cmfc", + /* CMAF AVC */ + "cfsd", + "cfhd", + "chdf", + /* CMAF AAC */ + "caac", + "caaa", + /* CMAF CEA closed captions */ + "ccea", + /* CMAF HEVC */ + "chhd", + "chh1", + "cud8", + "cud1", + "chd1", + "clg1" + /* TODO: CMAF WebVTT / IMSC1 */ + }; static const gchar *iso_brands[] = { "isom", "avc1", @@ -3445,6 +3466,12 @@ qt_type_find (GstTypeFind * tf, gpointer unused) break; } + if (ftyp_brand_is (&data[8], cmaf_brands, G_N_ELEMENTS (cmaf_brands))) { + tip = GST_TYPE_FIND_MAXIMUM; + variant = "cmaf"; + break; + } + if (ftyp_brand_is (&data[8], iso_brands, G_N_ELEMENTS (iso_brands))) { tip = GST_TYPE_FIND_MAXIMUM; variant = "iso"; @@ -3530,6 +3557,13 @@ qt_type_find (GstTypeFind * tf, gpointer unused) goto done; new_offset = 12; while (new_offset + 4 <= size) { + if (ftyp_brand_is (&data[new_offset], cmaf_brands, + G_N_ELEMENTS (cmaf_brands))) { + tip = GST_TYPE_FIND_MAXIMUM; + variant = "cmaf"; + goto done; + } + if (ftyp_brand_is (&data[new_offset], iso_brands, G_N_ELEMENTS (iso_brands))) { tip = GST_TYPE_FIND_MAXIMUM; -- 2.7.4