mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
typefinding: flac typefinder fixes
Use scan context for initial peek as well. Peek 6 bytes in the initial peek rather than 5 bytes, to match the length of the memcmp we're doing on that data later. Return immediately when we found caps from looking at the beginning of the data - no point in continuing to scan the next 64kB for something matching a frame header.
This commit is contained in:
parent
18f612ffa9
commit
4cbe4d2c72
1 changed files with 13 additions and 11 deletions
|
@ -552,19 +552,21 @@ static GstStaticCaps flac_caps = GST_STATIC_CAPS ("audio/x-flac");
|
||||||
static void
|
static void
|
||||||
flac_type_find (GstTypeFind * tf, gpointer unused)
|
flac_type_find (GstTypeFind * tf, gpointer unused)
|
||||||
{
|
{
|
||||||
guint8 *data;
|
|
||||||
DataScanCtx c = { 0, NULL, 0 };
|
DataScanCtx c = { 0, NULL, 0 };
|
||||||
|
|
||||||
data = gst_type_find_peek (tf, 0, 5);
|
if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 6)))
|
||||||
if (G_LIKELY (data)) {
|
return;
|
||||||
/* standard flac */
|
|
||||||
if (memcmp (data, "fLaC", 4) == 0) {
|
/* standard flac */
|
||||||
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, FLAC_CAPS);
|
if (memcmp (c.data, "fLaC", 4) == 0) {
|
||||||
}
|
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, FLAC_CAPS);
|
||||||
/* flac-in-ogg, see http://flac.sourceforge.net/ogg_mapping.html */
|
return;
|
||||||
else if (memcmp (data, "\177FLAC\001", 6) == 0) {
|
}
|
||||||
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, FLAC_CAPS);
|
|
||||||
}
|
/* flac-in-ogg, see http://flac.sourceforge.net/ogg_mapping.html */
|
||||||
|
if (memcmp (c.data, "\177FLAC\001", 6) == 0) {
|
||||||
|
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, FLAC_CAPS);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* flac without headers (subset format) */
|
/* flac without headers (subset format) */
|
||||||
|
|
Loading…
Reference in a new issue