mad, id3mux: (re)move broken, unmaintained and unloved id3mux element

It will be reborn with a shiny new code base under its hood in -bad.
See #581756 and #565764.
This commit is contained in:
Tim-Philipp Müller 2009-06-05 20:53:57 +01:00
parent c111e03e78
commit 78ed09615b
6 changed files with 196 additions and 1580 deletions

View file

@ -108,9 +108,6 @@ GST_IS_MAD
GST_IS_MAD_CLASS
GST_TYPE_MAD
gst_mad_get_type
gst_id3_tag_get_type
gst_mad_id3_to_tag_list
gst_mad_tag_list_to_id3_tag
</SECTION>
<SECTION>

View file

@ -1,6 +1,6 @@
<plugin>
<name>mad</name>
<description>id3 tag manipulation and mp3 decoding based on the mad library</description>
<description>mp3 decoding based on the mad library</description>
<filename>../../ext/mad/.libs/libgstmad.so</filename>
<basename>libgstmad.so</basename>
<version>0.10.11.1</version>
@ -9,27 +9,6 @@
<package>GStreamer Ugly Plug-ins git/prerelease</package>
<origin>Unknown package origin</origin>
<elements>
<element>
<name>id3mux</name>
<longname>id3 tag muxer</longname>
<class>Codec/Muxer/Audio</class>
<description>Add ID3 tagging information</description>
<author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>audio/mpeg, mpegversion=(int)1; audio/x-flac</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>application/x-id3</details>
</caps>
</pads>
</element>
<element>
<name>mad</name>
<longname>mad mp3 decoder</longname>

View file

@ -1,6 +1,6 @@
plugin_LTLIBRARIES = libgstmad.la
libgstmad_la_SOURCES = gstmad.c gstid3tag.c
libgstmad_la_SOURCES = gstmad.c
libgstmad_la_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \

File diff suppressed because it is too large Load diff

View file

@ -114,13 +114,9 @@ static void gst_mad_set_index (GstElement * element, GstIndex * index);
static GstIndex *gst_mad_get_index (GstElement * element);
#endif
static void
_do_init (GType type)
{
GST_DEBUG_CATEGORY_INIT (mad_debug, "mad", 0, "mad mp3 decoding");
}
static GstTagList *gst_mad_id3_to_tag_list (const struct id3_tag *tag);
GST_BOILERPLATE_FULL (GstMad, gst_mad, GstElement, GST_TYPE_ELEMENT, _do_init);
GST_BOILERPLATE (GstMad, gst_mad, GstElement, GST_TYPE_ELEMENT);
/*
#define GST_TYPE_MAD_LAYER (gst_mad_layer_get_type())
@ -1790,3 +1786,194 @@ gst_mad_change_state (GstElement * element, GstStateChange transition)
}
return ret;
}
/* id3 tag helper (FIXME: why does mad parse id3 tags at all? It shouldn't) */
static GstTagList *
gst_mad_id3_to_tag_list (const struct id3_tag *tag)
{
const struct id3_frame *frame;
const id3_ucs4_t *ucs4;
id3_utf8_t *utf8;
GstTagList *tag_list;
GType tag_type;
guint i = 0;
tag_list = gst_tag_list_new ();
while ((frame = id3_tag_findframe (tag, NULL, i++)) != NULL) {
const union id3_field *field;
unsigned int nstrings, j;
const gchar *tag_name;
/* find me the function to query the frame id */
gchar *id = g_strndup (frame->id, 5);
tag_name = gst_tag_from_id3_tag (id);
if (tag_name == NULL) {
g_free (id);
continue;
}
if (strcmp (id, "COMM") == 0) {
if (frame->nfields < 4)
continue;
ucs4 = id3_field_getfullstring (&frame->fields[3]);
g_assert (ucs4);
utf8 = id3_ucs4_utf8duplicate (ucs4);
if (utf8 == 0)
continue;
if (!g_utf8_validate ((char *) utf8, -1, NULL)) {
GST_ERROR ("converted string is not valid utf-8");
g_free (utf8);
continue;
}
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
GST_TAG_COMMENT, utf8, NULL);
g_free (utf8);
continue;
}
if (frame->nfields < 2)
continue;
field = &frame->fields[1];
nstrings = id3_field_getnstrings (field);
for (j = 0; j < nstrings; ++j) {
ucs4 = id3_field_getstrings (field, j);
g_assert (ucs4);
if (strcmp (id, ID3_FRAME_GENRE) == 0)
ucs4 = id3_genre_name (ucs4);
utf8 = id3_ucs4_utf8duplicate (ucs4);
if (utf8 == 0)
continue;
if (!g_utf8_validate ((char *) utf8, -1, NULL)) {
GST_ERROR ("converted string is not valid utf-8");
free (utf8);
continue;
}
tag_type = gst_tag_get_type (tag_name);
/* be sure to add non-string tags here */
switch (tag_type) {
case G_TYPE_UINT:
{
guint tmp;
gchar *check;
tmp = strtoul ((char *) utf8, &check, 10);
if (strcmp (tag_name, GST_TAG_DATE) == 0) {
GDate *d;
if (*check != '\0')
break;
if (tmp == 0)
break;
d = g_date_new_dmy (1, 1, tmp);
tmp = g_date_get_julian (d);
g_date_free (d);
} else if (strcmp (tag_name, GST_TAG_TRACK_NUMBER) == 0) {
if (*check == '/') {
guint total;
check++;
total = strtoul (check, &check, 10);
if (*check != '\0')
break;
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
GST_TAG_TRACK_COUNT, total, NULL);
}
} else if (strcmp (tag_name, GST_TAG_ALBUM_VOLUME_NUMBER) == 0) {
if (*check == '/') {
guint total;
check++;
total = strtoul (check, &check, 10);
if (*check != '\0')
break;
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
GST_TAG_ALBUM_VOLUME_COUNT, total, NULL);
}
}
if (*check != '\0')
break;
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, tag_name, tmp,
NULL);
break;
}
case G_TYPE_UINT64:
{
guint64 tmp;
g_assert (strcmp (tag_name, GST_TAG_DURATION) == 0);
tmp = strtoul ((char *) utf8, NULL, 10);
if (tmp == 0) {
break;
}
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
GST_TAG_DURATION, tmp * 1000 * 1000, NULL);
break;
}
case G_TYPE_STRING:{
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
tag_name, (const gchar *) utf8, NULL);
break;
}
/* handles GST_TYPE_DATE and anything else */
default:{
GValue src = { 0, };
GValue dest = { 0, };
g_value_init (&src, G_TYPE_STRING);
g_value_set_string (&src, (const gchar *) utf8);
g_value_init (&dest, tag_type);
if (g_value_transform (&src, &dest)) {
gst_tag_list_add_values (tag_list, GST_TAG_MERGE_APPEND,
tag_name, &dest, NULL);
} else {
GST_WARNING ("Failed to transform tag from string to type '%s'",
g_type_name (tag_type));
}
g_value_unset (&src);
g_value_unset (&dest);
break;
}
}
free (utf8);
}
g_free (id);
}
return tag_list;
}
/* plugin initialisation */
static gboolean
plugin_init (GstPlugin * plugin)
{
GST_DEBUG_CATEGORY_INIT (mad_debug, "mad", 0, "mad mp3 decoding");
return gst_element_register (plugin, "mad", GST_RANK_SECONDARY,
gst_mad_get_type ());
}
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
GST_VERSION_MINOR,
"mad",
"mp3 decoding based on the mad library",
plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);

View file

@ -104,13 +104,7 @@ struct _GstMadClass
GstElementClass parent_class;
};
GType gst_mad_get_type (void);
GType gst_id3_tag_get_type (guint type);
GstTagList* gst_mad_id3_to_tag_list (const struct id3_tag * tag);
struct id3_tag * gst_mad_tag_list_to_id3_tag (GstTagList * list);
GType gst_mad_get_type (void);
G_END_DECLS