diff options
author | Edward Hervey <edward@centricular.com> | 2018-01-03 15:31:04 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2018-01-17 15:58:01 +0200 |
commit | 7979a3edbd1e60eefec8ca2d10b2c0e7b44eef4d (patch) | |
tree | b9e23c865a77c526b5614a9193f11a29cdfe37c5 | |
parent | b8f47ba4f2c69318b3a5d22b8a365ea9577cb0bd (diff) | |
download | gstreamer-plugins-base-7979a3edbd1e60eefec8ca2d10b2c0e7b44eef4d.tar.gz |
typefind: Fix mp3 typefinding with multiple different headers
(yes, this has never worked since it was introduced, don't worry)
If we want to actually detect layer/channels/samplerate changes,
it would be better to:
* not reset the various prev_* variables at every iteration.
* and actually store the values when they change
CID #206079
CID #206080
CID #206081
-rw-r--r-- | gst/typefind/gsttypefindfunctions.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/gst/typefind/gsttypefindfunctions.c b/gst/typefind/gsttypefindfunctions.c index e5259de35..9497c4ca1 100644 --- a/gst/typefind/gsttypefindfunctions.c +++ b/gst/typefind/gsttypefindfunctions.c @@ -1443,12 +1443,12 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off, guint found = 0; /* number of valid headers found */ guint64 offset = skipped; gboolean changed = FALSE; + guint prev_layer = 0; + guint prev_channels = 0, prev_samplerate = 0; while (found < GST_MP3_TYPEFIND_TRY_HEADERS) { guint32 head; guint length; - guint prev_layer = 0; - guint prev_channels = 0, prev_samplerate = 0; gboolean free = FALSE; if ((gint64) (offset - skipped + 4) >= 0 && @@ -1495,15 +1495,16 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off, * this header*/ if (prev_layer) changed = TRUE; - prev_layer = layer; - prev_channels = channels; - prev_samplerate = samplerate; } else { found++; GST_LOG ("found %d. header at offset %" G_GUINT64_FORMAT " (0x%" G_GINT64_MODIFIER "X)", found, start_off + offset, start_off + offset); } + prev_layer = layer; + prev_channels = channels; + prev_samplerate = samplerate; + offset += length; } g_assert (found <= GST_MP3_TYPEFIND_TRY_HEADERS); |