diff --git a/ChangeLog b/ChangeLog index 9c429c2f8b..1ff39fe7ba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2004-11-25 Ronald S. Bultje + + * configure.ac: + * gst/apetag/Makefile.am: + * gst/apetag/apedemux.c: (gst_ape_demux_get_type), + (gst_ape_demux_base_init), (gst_ape_demux_class_init), + (gst_ape_demux_init), (gst_ape_demux_get_src_formats), + (gst_ape_demux_get_src_query_types), + (gst_ape_demux_handle_src_query), (gst_ape_demux_get_event_mask), + (gst_ape_demux_handle_src_event), (gst_ape_demux_handle_event), + (gst_ape_demux_typefind_peek), (gst_ape_demux_typefind_get_length), + (gst_ape_demux_typefind_suggest), (gst_ape_demux_typefind), + (gst_ape_demux_parse_tags), (gst_ape_demux_stream_init), + (gst_ape_demux_stream_data), (gst_ape_demux_loop), + (gst_ape_demux_change_state): + * gst/apetag/apedemux.h: + * gst/apetag/apetag.c: (plugin_init): + * gst/typefind/gsttypefindfunctions.c: (apetag_type_find), + (plugin_init): + APE v1/2 tag reader plus typefind function. + 2004-11-25 Ronald S. Bultje * configure.ac: diff --git a/configure.ac b/configure.ac index 025b85a789..d7b84133c5 100644 --- a/configure.ac +++ b/configure.ac @@ -329,6 +329,7 @@ GST_PLUGINS_ALL="\ ac3parse \ adder \ alpha \ + apetag \ asfdemux \ audioconvert \ audioscale \ @@ -1846,12 +1847,13 @@ gst/Makefile gst/ac3parse/Makefile gst/adder/Makefile gst/alpha/Makefile +gst/apetag/Makefile +gst/asfdemux/Makefile gst/audioconvert/Makefile gst/audioscale/Makefile gst/audiorate/Makefile gst/auparse/Makefile gst/avi/Makefile -gst/asfdemux/Makefile gst/cdxaparse/Makefile gst/chart/Makefile gst/colorspace/Makefile diff --git a/gst/typefind/gsttypefindfunctions.c b/gst/typefind/gsttypefindfunctions.c index 35c638024f..dd04535c5f 100644 --- a/gst/typefind/gsttypefindfunctions.c +++ b/gst/typefind/gsttypefindfunctions.c @@ -190,6 +190,31 @@ id3_type_find (GstTypeFind * tf, gpointer unused) } } +/*** application/x-ape **************************************************************/ + +static GstStaticCaps apetag_caps = GST_STATIC_CAPS ("application/x-apetag"); + +#define APETAG_CAPS gst_static_caps_get(&apetag_caps) +static void +apetag_type_find (GstTypeFind * tf, gpointer unused) +{ + guint8 *data; + + /* APEv1/2 at start of file */ + data = gst_type_find_peek (tf, 0, 8); + if (data && !memcmp (data, "APETAGEX", 8)) { + gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, APETAG_CAPS); + return; + } + + /* APEv1/2 at end of file */ + data = gst_type_find_peek (tf, -32, 8); + if (data && !memcmp (data, "APETAGEX", 8)) { + gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, APETAG_CAPS); + return; + } +} + /*** audio/x-ttafile *********************************************************/ static GstStaticCaps tta_caps = GST_STATIC_CAPS ("audio/x-ttafile"); @@ -1406,6 +1431,7 @@ plugin_init (GstPlugin * plugin) static gchar *flx_exts[] = { "flc", "fli", NULL }; static gchar *id3_exts[] = { "mp3", "mp2", "mp1", "mpga", "ogg", "flac", "tta", NULL }; + static gchar *apetag_exts[] = { "ape", "mpc", NULL }; static gchar *tta_exts[] = { "tta", NULL }; static gchar *mod_exts[] = { "669", "amf", "dsm", "gdm", "far", "imf", "it", "med", "mod", "mtm", "okt", "sam", @@ -1472,6 +1498,8 @@ plugin_init (GstPlugin * plugin) flx_exts, FLX_CAPS, NULL); TYPE_FIND_REGISTER (plugin, "application/x-id3", GST_RANK_PRIMARY, id3_type_find, id3_exts, ID3_CAPS, NULL); + TYPE_FIND_REGISTER (plugin, "application/x-apetag", GST_RANK_PRIMARY, + apetag_type_find, apetag_exts, APETAG_CAPS, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-ttafile", GST_RANK_PRIMARY, tta_type_find, tta_exts, TTA_CAPS, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-mod", GST_RANK_SECONDARY, mod_type_find,