X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=gst-plugins-base-subtitles0.10%2Fdebian%2Fpatches%2F0009-typefind-optimize-MP3-and-MPEG_SYS-typefinding.patch;fp=gst-plugins-base-subtitles0.10%2Fdebian%2Fpatches%2F0009-typefind-optimize-MP3-and-MPEG_SYS-typefinding.patch;h=5d78171f9a72be99c98153a219bb9a1f4cd0b22f;hb=57ba96e291a055f69dbfd4ae9f1ae2390e36986e;hp=0000000000000000000000000000000000000000;hpb=be2c98fb83895d10ac44af7b9a9c3e00ca54bf49;p=mafwsubrenderer diff --git a/gst-plugins-base-subtitles0.10/debian/patches/0009-typefind-optimize-MP3-and-MPEG_SYS-typefinding.patch b/gst-plugins-base-subtitles0.10/debian/patches/0009-typefind-optimize-MP3-and-MPEG_SYS-typefinding.patch new file mode 100644 index 0000000..5d78171 --- /dev/null +++ b/gst-plugins-base-subtitles0.10/debian/patches/0009-typefind-optimize-MP3-and-MPEG_SYS-typefinding.patch @@ -0,0 +1,100 @@ +From 68507fbfe3c266c51f4b674b8b635a7b63ee7e60 Mon Sep 17 00:00:00 2001 +From: Maemo Multimedia +Date: Thu, 22 Jan 2009 08:57:50 +0200 +Subject: [PATCH] typefind: optimize MP3 and MPEG_SYS typefinding + +--- + gst/typefind/gsttypefindfunctions.c | 32 ++++++++++++++++++++++++++------ + 1 files changed, 26 insertions(+), 6 deletions(-) + +diff --git a/gst/typefind/gsttypefindfunctions.c b/gst/typefind/gsttypefindfunctions.c +index 98dbade..2a3a733 100644 +--- a/gst/typefind/gsttypefindfunctions.c ++++ b/gst/typefind/gsttypefindfunctions.c +@@ -826,6 +826,18 @@ aac_type_find (GstTypeFind * tf, gpointer unused) + "framed", G_TYPE_BOOLEAN, FALSE, "mpegversion", G_TYPE_INT, 4, + "stream-format", G_TYPE_STRING, "adif", NULL); + break; ++ ++ GST_DEBUG ("No next frame found... (should have been at 0x%x)", len); ++ } else if (!memcmp (c.data, "ADIF", 4)) { ++ /* ADIF header */ ++ GstCaps *caps = gst_caps_new_simple ("audio/mpeg", ++ "framed", G_TYPE_BOOLEAN, FALSE, ++ "mpegversion", G_TYPE_INT, 4, ++ NULL); ++ ++ gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, caps); ++ gst_caps_unref (caps); ++ break; + } + + next: +@@ -987,7 +999,7 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off, + { + guint8 *data = NULL; + guint8 *data_end = NULL; +- guint size; ++ guint size, oldsize = 0; + guint64 skipped; + gint last_free_offset = -1; + gint last_free_framelen = -1; +@@ -1000,13 +1012,14 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off, + skipped = 0; + while (skipped < GST_MP3_TYPEFIND_TRY_SYNC) { + if (size <= 0) { +- size = GST_MP3_TYPEFIND_SYNC_SIZE * 2; ++ size = oldsize ? oldsize : GST_MP3_TYPEFIND_SYNC_SIZE * 2; + do { + size /= 2; + data = gst_type_find_peek (tf, skipped + start_off, size); + } while (size > 10 && !data); + if (!data) + break; ++ oldsize = size; + data_end = data + size; + } + if (*data == 0xFF) { +@@ -1814,14 +1827,16 @@ mpeg_sys_type_find (GstTypeFind * tf, gpointer unused) + guint pack_size; + guint since_last_sync = 0; + guint32 sync_word = 0xffffffff; ++ guint offset = 0; + ++possible: + G_STMT_START { + gint len; + +- len = MPEG2_MAX_PROBE_LENGTH; ++ len = MPEG2_MAX_PROBE_LENGTH / 4; + do { + len = len / 2; +- data = gst_type_find_peek (tf, 0, 5 + len); ++ data = gst_type_find_peek (tf, offset, 5 + len); + } while (data == NULL && len >= 32); + + if (!data) +@@ -1882,9 +1897,8 @@ mpeg_sys_type_find (GstTypeFind * tf, gpointer unused) + } + } + +- sync_word |= data[0]; ++ sync_word |= *data++; + since_last_sync++; +- data++; + + /* If we have found MAX headers, and *some* were pes headers (pack headers + * are optional in an mpeg system stream) then return our high-probability +@@ -1899,6 +1913,12 @@ mpeg_sys_type_find (GstTypeFind * tf, gpointer unused) + if (pes_headers > 0 && (pack_headers + pes_headers) > MPEG2_MIN_SYS_HEADERS) + goto suggest; + ++ if (pack_headers + pes_headers > 0) { ++ offset += data - data0; ++ if (offset < MPEG2_MAX_PROBE_LENGTH) ++ goto possible; ++ } ++ + return; + suggest: + {