gst/typefind/gsttypefindfunctions.c: Can't do tag preferences via probability, as tags would then lose against types ...

Original commit message from CVS:
* gst/typefind/gsttypefindfunctions.c: (id3v2_type_find),
(id3v1_type_find), (apetag_type_find), (plugin_init):
Can't do tag preferences via probability, as tags would then
lose against types that are recognised with MAXIMUM probability
(like .wav); so let all tag typefinders return MAXIMUM themselves
and order them via the rank. Split ID3v1 and ID3v2 typefinders so
that we can prefer APE to ID3v1 (fixes #335028).
This commit is contained in:
Tim-Philipp Müller 2006-03-19 11:37:46 +00:00
parent 82fd38fbcf
commit a73e81776d
3 changed files with 32 additions and 19 deletions

View file

@ -1,3 +1,13 @@
2006-03-19 Tim-Philipp Müller <tim at centricular dot net>
* gst/typefind/gsttypefindfunctions.c: (id3v2_type_find),
(id3v1_type_find), (apetag_type_find), (plugin_init):
Can't do tag preferences via probability, as tags would then
lose against types that are recognised with MAXIMUM probability
(like .wav); so let all tag typefinders return MAXIMUM themselves
and order them via the rank. Split ID3v1 and ID3v2 typefinders so
that we can prefer APE to ID3v1 (fixes #335028).
2006-03-17 Wim Taymans <wim@fluendo.com>
* gst-libs/gst/audio/gstbaseaudiosink.c:

2
common

@ -1 +1 @@
Subproject commit 9200457d08a57f0d7eaeb56915804fa8faf14418
Subproject commit f1c7bfd24d0fcc4e5113ce3b96b1fac83a9ec560

View file

@ -297,24 +297,25 @@ static GstStaticCaps id3_caps = GST_STATIC_CAPS ("application/x-id3");
#define ID3_CAPS gst_static_caps_get(&id3_caps)
static void
id3_type_find (GstTypeFind * tf, gpointer unused)
id3v2_type_find (GstTypeFind * tf, gpointer unused)
{
/* detect ID3v2 first */
guint8 *data = gst_type_find_peek (tf, 0, 10);
if (data) {
/* detect valid header */
if (memcmp (data, "ID3", 3) == 0 &&
data[3] != 0xFF && data[4] != 0xFF &&
(data[6] & 0x80) == 0 && (data[7] & 0x80) == 0 &&
(data[8] & 0x80) == 0 && (data[9] & 0x80) == 0) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, ID3_CAPS);
return;
}
if (data && memcmp (data, "ID3", 3) == 0 &&
data[3] != 0xFF && data[4] != 0xFF &&
(data[6] & 0x80) == 0 && (data[7] & 0x80) == 0 &&
(data[8] & 0x80) == 0 && (data[9] & 0x80) == 0) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, ID3_CAPS);
}
data = gst_type_find_peek (tf, -128, 3);
}
static void
id3v1_type_find (GstTypeFind * tf, gpointer unused)
{
guint8 *data = gst_type_find_peek (tf, -128, 3);
if (data && memcmp (data, "TAG", 3) == 0) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM - 3, ID3_CAPS);
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, ID3_CAPS);
}
}
@ -331,14 +332,14 @@ apetag_type_find (GstTypeFind * tf, gpointer unused)
/* APEv1/2 at start of file */
data = gst_type_find_peek (tf, 0, 8);
if (data && !memcmp (data, "APETAGEX", 8)) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM - 1, APETAG_CAPS);
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, APETAG_CAPS);
return;
}
/* APEv1/2 at end of file */
data = gst_type_find_peek (tf, -32, 8);
if (data && !memcmp (data, "APETAGEX", 8)) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM - 2, APETAG_CAPS);
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, APETAG_CAPS);
return;
}
}
@ -2271,9 +2272,11 @@ plugin_init (GstPlugin * plugin)
flac_exts, "fLaC", 4, GST_TYPE_FIND_MAXIMUM);
TYPE_FIND_REGISTER (plugin, "video/x-fli", GST_RANK_MARGINAL, flx_type_find,
flx_exts, FLX_CAPS, NULL, NULL);
TYPE_FIND_REGISTER (plugin, "application/x-id3", GST_RANK_PRIMARY + 2,
id3_type_find, id3_exts, ID3_CAPS, NULL, NULL);
TYPE_FIND_REGISTER (plugin, "application/x-apetag", GST_RANK_PRIMARY + 1,
TYPE_FIND_REGISTER (plugin, "application/x-id3v2", GST_RANK_PRIMARY + 3,
id3v2_type_find, id3_exts, ID3_CAPS, NULL, NULL);
TYPE_FIND_REGISTER (plugin, "application/x-id3v1", GST_RANK_PRIMARY + 1,
id3v1_type_find, id3_exts, ID3_CAPS, NULL, NULL);
TYPE_FIND_REGISTER (plugin, "application/x-apetag", GST_RANK_PRIMARY + 2,
apetag_type_find, apetag_exts, APETAG_CAPS, NULL, NULL);
TYPE_FIND_REGISTER (plugin, "audio/x-ttafile", GST_RANK_PRIMARY,
tta_type_find, tta_exts, TTA_CAPS, NULL, NULL);