summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Hervey <edward@centricular.com>2018-01-03 15:31:04 +0100
committerSebastian Dröge <sebastian@centricular.com>2018-01-17 15:58:01 +0200
commit7979a3edbd1e60eefec8ca2d10b2c0e7b44eef4d (patch)
treeb9e23c865a77c526b5614a9193f11a29cdfe37c5
parentb8f47ba4f2c69318b3a5d22b8a365ea9577cb0bd (diff)
downloadgstreamer-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.c11
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);