[rhythmbox] metadata: move some generic utility code to a separate file
- From: Jonathan Matthew <jmatthew src gnome org>
- To: svn-commits-list gnome org
- Subject: [rhythmbox] metadata: move some generic utility code to a separate file
- Date: Mon, 8 Jun 2009 06:42:28 -0400 (EDT)
commit efdc2dca0daa83a306062f936e9b08661849b136
Author: Jonathan Matthew <jonathan d14n org>
Date: Mon Jun 8 19:15:54 2009 +1000
metadata: move some generic utility code to a separate file
Mostly to avoid copying and pasting it into the upcoming
reimplementation of the metadata backend.
---
metadata/Makefile.am | 4 +-
metadata/rb-metadata-gst-common.c | 205 +++++++++++++++++++++++++++++++++++++
metadata/rb-metadata-gst-common.h | 44 ++++++++
metadata/rb-metadata-gst.c | 163 +-----------------------------
4 files changed, 254 insertions(+), 162 deletions(-)
diff --git a/metadata/Makefile.am b/metadata/Makefile.am
index 0436420..43b1a81 100644
--- a/metadata/Makefile.am
+++ b/metadata/Makefile.am
@@ -41,7 +41,9 @@ librbmetadatasvc_la_SOURCES = \
rb-metadata-common.c \
rb-metadata-dbus.h \
rb-metadata-dbus.c \
- rb-metadata-gst.c
+ rb-metadata-gst.c \
+ rb-metadata-gst-common.h \
+ rb-metadata-gst-common.c
libexec_PROGRAMS = rhythmbox-metadata
rhythmbox_metadata_SOURCES = \
diff --git a/metadata/rb-metadata-gst-common.c b/metadata/rb-metadata-gst-common.c
new file mode 100644
index 0000000..f092269
--- /dev/null
+++ b/metadata/rb-metadata-gst-common.c
@@ -0,0 +1,205 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2003,2004 Colin Walters <walters verbum org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The Rhythmbox authors hereby grant permission for non-GPL compatible
+ * GStreamer plugins to be used and distributed together with GStreamer
+ * and Rhythmbox. This permission is above and beyond the permissions granted
+ * by the GPL license by which Rhythmbox is covered. If you modify this code
+ * you may extend this exception to your version of the code, but you are not
+ * obligated to do so. If you do not wish to do so, delete this exception
+ * statement from your version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gst/gst.h>
+#include <gst/tag/tag.h>
+
+#include "rb-metadata-gst-common.h"
+#include "rb-debug.h"
+
+static void
+gst_date_gulong_transform (const GValue *src, GValue *dest)
+{
+ const GDate *date = gst_value_get_date (src);
+
+ g_value_set_ulong (dest, (date) ? g_date_get_julian (date) : 0);
+}
+
+static void
+gulong_gst_date_transform (const GValue *src, GValue *dest)
+{
+ gulong day = g_value_get_ulong (src);
+ GDate *date = g_date_new_julian (day);
+
+ gst_value_set_date (dest, date);
+ g_date_free (date);
+}
+
+void
+rb_metadata_gst_register_transforms ()
+{
+ g_value_register_transform_func (GST_TYPE_DATE, G_TYPE_ULONG, gst_date_gulong_transform);
+ g_value_register_transform_func (G_TYPE_ULONG, GST_TYPE_DATE, gulong_gst_date_transform);
+}
+
+RBMetaDataField
+rb_metadata_gst_tag_to_field (const char *tag)
+{
+ if (!strcmp (tag, GST_TAG_TITLE))
+ return RB_METADATA_FIELD_TITLE;
+ else if (!strcmp (tag, GST_TAG_ARTIST))
+ return RB_METADATA_FIELD_ARTIST;
+ else if (!strcmp (tag, GST_TAG_ALBUM))
+ return RB_METADATA_FIELD_ALBUM;
+ else if (!strcmp (tag, GST_TAG_DATE))
+ return RB_METADATA_FIELD_DATE;
+ else if (!strcmp (tag, GST_TAG_GENRE))
+ return RB_METADATA_FIELD_GENRE;
+ else if (!strcmp (tag, GST_TAG_COMMENT))
+ return RB_METADATA_FIELD_COMMENT;
+ else if (!strcmp (tag, GST_TAG_TRACK_NUMBER))
+ return RB_METADATA_FIELD_TRACK_NUMBER;
+ else if (!strcmp (tag, GST_TAG_TRACK_COUNT))
+ return RB_METADATA_FIELD_MAX_TRACK_NUMBER;
+ else if (!strcmp (tag, GST_TAG_ALBUM_VOLUME_NUMBER))
+ return RB_METADATA_FIELD_DISC_NUMBER;
+ else if (!strcmp (tag, GST_TAG_ALBUM_VOLUME_COUNT))
+ return RB_METADATA_FIELD_MAX_TRACK_NUMBER;
+ else if (!strcmp (tag, GST_TAG_DESCRIPTION))
+ return RB_METADATA_FIELD_DESCRIPTION;
+ else if (!strcmp (tag, GST_TAG_VERSION))
+ return RB_METADATA_FIELD_VERSION;
+ else if (!strcmp (tag, GST_TAG_ISRC))
+ return RB_METADATA_FIELD_ISRC;
+ else if (!strcmp (tag, GST_TAG_ORGANIZATION))
+ return RB_METADATA_FIELD_ORGANIZATION;
+ else if (!strcmp (tag, GST_TAG_COPYRIGHT))
+ return RB_METADATA_FIELD_COPYRIGHT;
+ else if (!strcmp (tag, GST_TAG_CONTACT))
+ return RB_METADATA_FIELD_CONTACT;
+ else if (!strcmp (tag, GST_TAG_LICENSE))
+ return RB_METADATA_FIELD_LICENSE;
+ else if (!strcmp (tag, GST_TAG_PERFORMER))
+ return RB_METADATA_FIELD_PERFORMER;
+ else if (!strcmp (tag, GST_TAG_DURATION))
+ return RB_METADATA_FIELD_DURATION;
+ else if (!strcmp (tag, GST_TAG_CODEC))
+ return RB_METADATA_FIELD_CODEC;
+ else if (!strcmp (tag, GST_TAG_BITRATE))
+ return RB_METADATA_FIELD_BITRATE;
+ else if (!strcmp (tag, GST_TAG_TRACK_GAIN))
+ return RB_METADATA_FIELD_TRACK_GAIN;
+ else if (!strcmp (tag, GST_TAG_TRACK_PEAK))
+ return RB_METADATA_FIELD_TRACK_PEAK;
+ else if (!strcmp (tag, GST_TAG_ALBUM_GAIN))
+ return RB_METADATA_FIELD_ALBUM_GAIN;
+ else if (!strcmp (tag, GST_TAG_ALBUM_PEAK))
+ return RB_METADATA_FIELD_ALBUM_PEAK;
+ else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_TRACKID))
+ return RB_METADATA_FIELD_MUSICBRAINZ_TRACKID;
+ else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_ARTISTID))
+ return RB_METADATA_FIELD_MUSICBRAINZ_ARTISTID;
+ else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_ALBUMID))
+ return RB_METADATA_FIELD_MUSICBRAINZ_ALBUMID;
+ else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_ALBUMARTISTID))
+ return RB_METADATA_FIELD_MUSICBRAINZ_ALBUMARTISTID;
+ else if (!strcmp (tag, GST_TAG_ARTIST_SORTNAME))
+ return RB_METADATA_FIELD_ARTIST_SORTNAME;
+ else if (!strcmp (tag, GST_TAG_ALBUM_SORTNAME))
+ return RB_METADATA_FIELD_ALBUM_SORTNAME;
+ else
+ return -1;
+}
+
+const char *
+rb_metadata_gst_field_to_gst_tag (RBMetaDataField field)
+{
+ switch (field)
+ {
+ case RB_METADATA_FIELD_TITLE:
+ return GST_TAG_TITLE;
+ case RB_METADATA_FIELD_ARTIST:
+ return GST_TAG_ARTIST;
+ case RB_METADATA_FIELD_ALBUM:
+ return GST_TAG_ALBUM;
+ case RB_METADATA_FIELD_DATE:
+ return GST_TAG_DATE;
+ case RB_METADATA_FIELD_GENRE:
+ return GST_TAG_GENRE;
+ case RB_METADATA_FIELD_COMMENT:
+ return GST_TAG_COMMENT;
+ case RB_METADATA_FIELD_TRACK_NUMBER:
+ return GST_TAG_TRACK_NUMBER;
+ case RB_METADATA_FIELD_MAX_TRACK_NUMBER:
+ return GST_TAG_TRACK_COUNT;
+ case RB_METADATA_FIELD_DISC_NUMBER:
+ return GST_TAG_ALBUM_VOLUME_NUMBER;
+ case RB_METADATA_FIELD_MAX_DISC_NUMBER:
+ return GST_TAG_ALBUM_VOLUME_COUNT;
+ case RB_METADATA_FIELD_DESCRIPTION:
+ return GST_TAG_DESCRIPTION;
+ case RB_METADATA_FIELD_VERSION:
+ return GST_TAG_VERSION;
+ case RB_METADATA_FIELD_ISRC:
+ return GST_TAG_ISRC;
+ case RB_METADATA_FIELD_ORGANIZATION:
+ return GST_TAG_ORGANIZATION;
+ case RB_METADATA_FIELD_COPYRIGHT:
+ return GST_TAG_COPYRIGHT;
+ case RB_METADATA_FIELD_CONTACT:
+ return GST_TAG_CONTACT;
+ case RB_METADATA_FIELD_LICENSE:
+ return GST_TAG_LICENSE;
+ case RB_METADATA_FIELD_PERFORMER:
+ return GST_TAG_PERFORMER;
+ case RB_METADATA_FIELD_DURATION:
+ return GST_TAG_DURATION;
+ case RB_METADATA_FIELD_CODEC:
+ return GST_TAG_CODEC;
+ case RB_METADATA_FIELD_BITRATE:
+ return GST_TAG_BITRATE;
+ case RB_METADATA_FIELD_TRACK_GAIN:
+ return GST_TAG_TRACK_GAIN;
+ case RB_METADATA_FIELD_TRACK_PEAK:
+ return GST_TAG_TRACK_PEAK;
+ case RB_METADATA_FIELD_ALBUM_GAIN:
+ return GST_TAG_ALBUM_GAIN;
+ case RB_METADATA_FIELD_ALBUM_PEAK:
+ return GST_TAG_ALBUM_PEAK;
+ case RB_METADATA_FIELD_MUSICBRAINZ_TRACKID:
+ return GST_TAG_MUSICBRAINZ_TRACKID;
+ case RB_METADATA_FIELD_MUSICBRAINZ_ARTISTID:
+ return GST_TAG_MUSICBRAINZ_ARTISTID;
+ case RB_METADATA_FIELD_MUSICBRAINZ_ALBUMID:
+ return GST_TAG_MUSICBRAINZ_ALBUMID;
+ case RB_METADATA_FIELD_MUSICBRAINZ_ALBUMARTISTID:
+ return GST_TAG_MUSICBRAINZ_ALBUMARTISTID;
+ case RB_METADATA_FIELD_ARTIST_SORTNAME:
+ return GST_TAG_ARTIST_SORTNAME;
+ case RB_METADATA_FIELD_ALBUM_SORTNAME:
+ return GST_TAG_ALBUM_SORTNAME;
+ default:
+ return NULL;
+ }
+}
+
diff --git a/metadata/rb-metadata-gst-common.h b/metadata/rb-metadata-gst-common.h
new file mode 100644
index 0000000..33c6592
--- /dev/null
+++ b/metadata/rb-metadata-gst-common.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2003,2004 Colin Walters <walters verbum org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The Rhythmbox authors hereby grant permission for non-GPL compatible
+ * GStreamer plugins to be used and distributed together with GStreamer
+ * and Rhythmbox. This permission is above and beyond the permissions granted
+ * by the GPL license by which Rhythmbox is covered. If you modify this code
+ * you may extend this exception to your version of the code, but you are not
+ * obligated to do so. If you do not wish to do so, delete this exception
+ * statement from your version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef RB_METADATA_GST_COMMON_H
+#define RB_METADATA_GST_COMMON_H
+
+G_BEGIN_DECLS
+
+#include <glib.h>
+
+#include "rb-metadata.h"
+
+const char * rb_metadata_gst_field_to_gst_tag (RBMetaDataField field);
+RBMetaDataField rb_metadata_gst_tag_to_field (const char *tag);
+
+void rb_metadata_gst_register_transforms (void);
+
+G_END_DECLS
+
+#endif /* RB_METADATA_GST_COMMON_H */
diff --git a/metadata/rb-metadata-gst.c b/metadata/rb-metadata-gst.c
index 0a83e81..9c4edce 100644
--- a/metadata/rb-metadata-gst.c
+++ b/metadata/rb-metadata-gst.c
@@ -40,6 +40,7 @@
#include <gst/pbutils/pbutils.h>
#include "rb-metadata.h"
+#include "rb-metadata-gst-common.h"
#include "rb-debug.h"
#include "rb-util.h"
#include "rb-file-helpers.h"
@@ -108,24 +109,6 @@ struct RBMetaDataPrivate
#define RB_METADATA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RB_TYPE_METADATA, RBMetaDataPrivate))
static void
-gst_date_gulong_transform (const GValue *src, GValue *dest)
-{
- const GDate *date = gst_value_get_date (src);
-
- g_value_set_ulong (dest, (date) ? g_date_get_julian (date) : 0);
-}
-
-static void
-gulong_gst_date_transform (const GValue *src, GValue *dest)
-{
- gulong day = g_value_get_ulong (src);
- GDate *date = g_date_new_julian (day);
-
- gst_value_set_date (dest, date);
- g_date_free (date);
-}
-
-static void
rb_metadata_class_init (RBMetaDataClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -133,8 +116,7 @@ rb_metadata_class_init (RBMetaDataClass *klass)
object_class->finalize = rb_metadata_finalize;
g_type_class_add_private (klass, sizeof (RBMetaDataPrivate));
- g_value_register_transform_func (GST_TYPE_DATE, G_TYPE_ULONG, gst_date_gulong_transform);
- g_value_register_transform_func (G_TYPE_ULONG, GST_TYPE_DATE, gulong_gst_date_transform);
+ rb_metadata_gst_register_transforms ();
}
static GstElement *
@@ -461,147 +443,6 @@ free_gvalue (GValue *val)
g_free (val);
}
-static int
-rb_metadata_gst_tag_to_field (const char *tag)
-{
- if (!strcmp (tag, GST_TAG_TITLE))
- return RB_METADATA_FIELD_TITLE;
- else if (!strcmp (tag, GST_TAG_ARTIST))
- return RB_METADATA_FIELD_ARTIST;
- else if (!strcmp (tag, GST_TAG_ALBUM))
- return RB_METADATA_FIELD_ALBUM;
- else if (!strcmp (tag, GST_TAG_DATE))
- return RB_METADATA_FIELD_DATE;
- else if (!strcmp (tag, GST_TAG_GENRE))
- return RB_METADATA_FIELD_GENRE;
- else if (!strcmp (tag, GST_TAG_COMMENT))
- return RB_METADATA_FIELD_COMMENT;
- else if (!strcmp (tag, GST_TAG_TRACK_NUMBER))
- return RB_METADATA_FIELD_TRACK_NUMBER;
- else if (!strcmp (tag, GST_TAG_TRACK_COUNT))
- return RB_METADATA_FIELD_MAX_TRACK_NUMBER;
- else if (!strcmp (tag, GST_TAG_ALBUM_VOLUME_NUMBER))
- return RB_METADATA_FIELD_DISC_NUMBER;
- else if (!strcmp (tag, GST_TAG_ALBUM_VOLUME_COUNT))
- return RB_METADATA_FIELD_MAX_TRACK_NUMBER;
- else if (!strcmp (tag, GST_TAG_DESCRIPTION))
- return RB_METADATA_FIELD_DESCRIPTION;
- else if (!strcmp (tag, GST_TAG_VERSION))
- return RB_METADATA_FIELD_VERSION;
- else if (!strcmp (tag, GST_TAG_ISRC))
- return RB_METADATA_FIELD_ISRC;
- else if (!strcmp (tag, GST_TAG_ORGANIZATION))
- return RB_METADATA_FIELD_ORGANIZATION;
- else if (!strcmp (tag, GST_TAG_COPYRIGHT))
- return RB_METADATA_FIELD_COPYRIGHT;
- else if (!strcmp (tag, GST_TAG_CONTACT))
- return RB_METADATA_FIELD_CONTACT;
- else if (!strcmp (tag, GST_TAG_LICENSE))
- return RB_METADATA_FIELD_LICENSE;
- else if (!strcmp (tag, GST_TAG_PERFORMER))
- return RB_METADATA_FIELD_PERFORMER;
- else if (!strcmp (tag, GST_TAG_DURATION))
- return RB_METADATA_FIELD_DURATION;
- else if (!strcmp (tag, GST_TAG_CODEC))
- return RB_METADATA_FIELD_CODEC;
- else if (!strcmp (tag, GST_TAG_BITRATE))
- return RB_METADATA_FIELD_BITRATE;
- else if (!strcmp (tag, GST_TAG_TRACK_GAIN))
- return RB_METADATA_FIELD_TRACK_GAIN;
- else if (!strcmp (tag, GST_TAG_TRACK_PEAK))
- return RB_METADATA_FIELD_TRACK_PEAK;
- else if (!strcmp (tag, GST_TAG_ALBUM_GAIN))
- return RB_METADATA_FIELD_ALBUM_GAIN;
- else if (!strcmp (tag, GST_TAG_ALBUM_PEAK))
- return RB_METADATA_FIELD_ALBUM_PEAK;
- else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_TRACKID))
- return RB_METADATA_FIELD_MUSICBRAINZ_TRACKID;
- else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_ARTISTID))
- return RB_METADATA_FIELD_MUSICBRAINZ_ARTISTID;
- else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_ALBUMID))
- return RB_METADATA_FIELD_MUSICBRAINZ_ALBUMID;
- else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_ALBUMARTISTID))
- return RB_METADATA_FIELD_MUSICBRAINZ_ALBUMARTISTID;
- else if (!strcmp (tag, GST_TAG_ARTIST_SORTNAME))
- return RB_METADATA_FIELD_ARTIST_SORTNAME;
- else if (!strcmp (tag, GST_TAG_ALBUM_SORTNAME))
- return RB_METADATA_FIELD_ALBUM_SORTNAME;
- else
- return -1;
-}
-
-static const char *
-rb_metadata_gst_field_to_gst_tag (RBMetaDataField field)
-{
- switch (field)
- {
- case RB_METADATA_FIELD_TITLE:
- return GST_TAG_TITLE;
- case RB_METADATA_FIELD_ARTIST:
- return GST_TAG_ARTIST;
- case RB_METADATA_FIELD_ALBUM:
- return GST_TAG_ALBUM;
- case RB_METADATA_FIELD_DATE:
- return GST_TAG_DATE;
- case RB_METADATA_FIELD_GENRE:
- return GST_TAG_GENRE;
- case RB_METADATA_FIELD_COMMENT:
- return GST_TAG_COMMENT;
- case RB_METADATA_FIELD_TRACK_NUMBER:
- return GST_TAG_TRACK_NUMBER;
- case RB_METADATA_FIELD_MAX_TRACK_NUMBER:
- return GST_TAG_TRACK_COUNT;
- case RB_METADATA_FIELD_DISC_NUMBER:
- return GST_TAG_ALBUM_VOLUME_NUMBER;
- case RB_METADATA_FIELD_MAX_DISC_NUMBER:
- return GST_TAG_ALBUM_VOLUME_COUNT;
- case RB_METADATA_FIELD_DESCRIPTION:
- return GST_TAG_DESCRIPTION;
- case RB_METADATA_FIELD_VERSION:
- return GST_TAG_VERSION;
- case RB_METADATA_FIELD_ISRC:
- return GST_TAG_ISRC;
- case RB_METADATA_FIELD_ORGANIZATION:
- return GST_TAG_ORGANIZATION;
- case RB_METADATA_FIELD_COPYRIGHT:
- return GST_TAG_COPYRIGHT;
- case RB_METADATA_FIELD_CONTACT:
- return GST_TAG_CONTACT;
- case RB_METADATA_FIELD_LICENSE:
- return GST_TAG_LICENSE;
- case RB_METADATA_FIELD_PERFORMER:
- return GST_TAG_PERFORMER;
- case RB_METADATA_FIELD_DURATION:
- return GST_TAG_DURATION;
- case RB_METADATA_FIELD_CODEC:
- return GST_TAG_CODEC;
- case RB_METADATA_FIELD_BITRATE:
- return GST_TAG_BITRATE;
- case RB_METADATA_FIELD_TRACK_GAIN:
- return GST_TAG_TRACK_GAIN;
- case RB_METADATA_FIELD_TRACK_PEAK:
- return GST_TAG_TRACK_PEAK;
- case RB_METADATA_FIELD_ALBUM_GAIN:
- return GST_TAG_ALBUM_GAIN;
- case RB_METADATA_FIELD_ALBUM_PEAK:
- return GST_TAG_ALBUM_PEAK;
- case RB_METADATA_FIELD_MUSICBRAINZ_TRACKID:
- return GST_TAG_MUSICBRAINZ_TRACKID;
- case RB_METADATA_FIELD_MUSICBRAINZ_ARTISTID:
- return GST_TAG_MUSICBRAINZ_ARTISTID;
- case RB_METADATA_FIELD_MUSICBRAINZ_ALBUMID:
- return GST_TAG_MUSICBRAINZ_ALBUMID;
- case RB_METADATA_FIELD_MUSICBRAINZ_ALBUMARTISTID:
- return GST_TAG_MUSICBRAINZ_ALBUMARTISTID;
- case RB_METADATA_FIELD_ARTIST_SORTNAME:
- return GST_TAG_ARTIST_SORTNAME;
- case RB_METADATA_FIELD_ALBUM_SORTNAME:
- return GST_TAG_ALBUM_SORTNAME;
- default:
- return NULL;
- }
-}
-
static const char *
rb_metadata_gst_type_to_name (RBMetaData *md, const char *mimetype)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]