typefindfunctions: Add various CMAF brands to the MP4 typefinder

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1234>
This commit is contained in:
Sebastian Dröge 2021-10-23 14:31:59 +03:00 committed by GStreamer Marge Bot
parent 041bc2652b
commit 37a744889c

View file

@ -3412,6 +3412,27 @@ qt_type_find (GstTypeFind * tf, gpointer unused)
guint64 size; guint64 size;
const gchar *variant = NULL; const gchar *variant = NULL;
static const gchar *qt_brands[] = { "qt " }; 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[] = { static const gchar *iso_brands[] = {
"isom", "isom",
"avc1", "avc1",
@ -3445,6 +3466,12 @@ qt_type_find (GstTypeFind * tf, gpointer unused)
break; 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))) { if (ftyp_brand_is (&data[8], iso_brands, G_N_ELEMENTS (iso_brands))) {
tip = GST_TYPE_FIND_MAXIMUM; tip = GST_TYPE_FIND_MAXIMUM;
variant = "iso"; variant = "iso";
@ -3530,6 +3557,13 @@ qt_type_find (GstTypeFind * tf, gpointer unused)
goto done; goto done;
new_offset = 12; new_offset = 12;
while (new_offset + 4 <= size) { 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, if (ftyp_brand_is (&data[new_offset], iso_brands,
G_N_ELEMENTS (iso_brands))) { G_N_ELEMENTS (iso_brands))) {
tip = GST_TYPE_FIND_MAXIMUM; tip = GST_TYPE_FIND_MAXIMUM;