summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
m---------common0
-rw-r--r--ext/faad/gstfaad.c21
3 files changed, 18 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 562adf95..72a6538b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-03-08 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Patch by: Sjoerd Simons <sjoerd at luon dot net>
+
+ * ext/faad/gstfaad.c: (looks_like_valid_header):
+ Improve the header checking to look for what faad2 looks
+ for too. Fixes playback of same apple trailers.
+ Fixes bug #469979.
+
2008-03-07 Sebastian Dröge <slomo@circular-chaos.org>
* configure.ac:
diff --git a/common b/common
-Subproject e02bd43fe6b9e45536eccbf5b7a5f9eae62030f
+Subproject 170f8e91adc7157f6e708ffa58ca22d10e4e45d
diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c
index b20304f2..1ddaf28f 100644
--- a/ext/faad/gstfaad.c
+++ b/ext/faad/gstfaad.c
@@ -1141,22 +1141,19 @@ gst_faad_sync (GstBuffer * buf, guint * off)
static gboolean
looks_like_valid_header (guint8 * input_data, guint input_size)
{
- guint32 rate;
- guint32 channels;
-
- if (input_size < 2)
+ if (input_size < 4)
return FALSE;
- rate = ((input_data[0] & 0x7) << 1) | ((input_data[1] & 0x80) >> 7);
- channels = (input_data[1] & 0x78) >> 3;
-
- if (rate == 0xd || rate == 0xe) /* Reserved values */
- return FALSE;
+ if (input_data[0] == 'A'
+ && input_data[1] == 'D' && input_data[2] == 'I' && input_data[3] == 'F')
+ /* ADIF type header */
+ return TRUE;
- if (channels == 0) /* Extended specifier: never seen one of these */
- return FALSE;
+ if (input_data[0] == 0xff && (input_data[1] >> 4) == 0xf)
+ /* ADTS type header */
+ return TRUE;
- return TRUE;
+ return FALSE;
}
static GstFlowReturn