| From 649bd92cd2600719862ad5189899212409dd0a67 Mon Sep 17 00:00:00 2001 |
| From: Leon Merten Lohse <leon@green-side.de> |
| Date: Thu, 3 May 2012 23:50:30 +0100 |
| Subject: [PATCH] cdio: compensate for libcdio's recent cd-text api changes |
| |
| https://bugzilla.gnome.org/show_bug.cgi?id=675112 |
| |
| Conflicts: |
| |
| ext/cdio/gstcdiocddasrc.c |
| |
| Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com> |
| |
| Upstream-Status: Backport |
| --- |
| ext/cdio/gstcdio.c | 35 ++++++++++++++++++++++++++++------- |
| ext/cdio/gstcdio.h | 16 ++++++++++++++++ |
| ext/cdio/gstcdiocddasrc.c | 19 +++++++++++++++++++ |
| 3 files changed, 63 insertions(+), 7 deletions(-) |
| |
| diff --git a/ext/cdio/gstcdio.c b/ext/cdio/gstcdio.c |
| index 2f58d18..483ebf5 100644 |
| --- a/ext/cdio/gstcdio.c |
| +++ b/ext/cdio/gstcdio.c |
| @@ -30,12 +30,16 @@ |
| GST_DEBUG_CATEGORY (gst_cdio_debug); |
| |
| void |
| -gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, |
| +gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track, |
| cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags) |
| { |
| const gchar *txt; |
| |
| +#if LIBCDIO_VERSION_NUM > 83 |
| + txt = cdtext_get_const (cdtext, field, track); |
| +#else |
| txt = cdtext_get_const (field, cdtext); |
| +#endif |
| if (txt == NULL || *txt == '\0') { |
| GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag); |
| return; |
| @@ -57,6 +61,12 @@ gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, |
| } |
| |
| GstTagList * |
| +#if LIBCDIO_VERSION_NUM > 83 |
| +gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track) |
| +{ |
| + GstTagList *tags = NULL; |
| + |
| +#else |
| gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track) |
| { |
| GstTagList *tags = NULL; |
| @@ -67,14 +77,22 @@ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track) |
| GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track); |
| return NULL; |
| } |
| +#endif |
| |
| - gst_cdio_add_cdtext_field (src, t, CDTEXT_PERFORMER, GST_TAG_ARTIST, &tags); |
| - gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_TITLE, &tags); |
| + gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER, |
| + GST_TAG_ARTIST, &tags); |
| + gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE, |
| + &tags); |
| |
| return tags; |
| } |
| |
| void |
| +#if LIBCDIO_VERSION_NUM > 83 |
| +gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t, |
| + GstTagList * tags) |
| +{ |
| +#else |
| gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags) |
| { |
| cdtext_t *t; |
| @@ -84,11 +102,14 @@ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags) |
| GST_DEBUG_OBJECT (src, "no CD-TEXT for album"); |
| return; |
| } |
| +#endif |
| |
| - /* FIXME: map CDTEXT_PERFORMER to GST_TAG_ALBUM_ARTIST once we have that */ |
| - gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_ALBUM, &tags); |
| - gst_cdio_add_cdtext_field (src, t, CDTEXT_GENRE, GST_TAG_GENRE, &tags); |
| - |
| + gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER, |
| + GST_TAG_ALBUM_ARTIST, &tags); |
| + gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM, |
| + &tags); |
| + gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE, |
| + &tags); |
| GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags); |
| } |
| |
| diff --git a/ext/cdio/gstcdio.h b/ext/cdio/gstcdio.h |
| index ef31ed0..c6da580 100644 |
| --- a/ext/cdio/gstcdio.h |
| +++ b/ext/cdio/gstcdio.h |
| @@ -24,22 +24,38 @@ |
| #include <gst/gst.h> |
| #include <cdio/cdio.h> |
| #include <cdio/cdtext.h> |
| +#include <cdio/version.h> |
| + |
| +#if LIBCDIO_VERSION_NUM <= 83 |
| + #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER |
| + #define CDTEXT_FIELD_GENRE CDTEXT_GENRE |
| + #define CDTEXT_FIELD_TITLE CDTEXT_TITLE |
| +#endif |
| |
| GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug); |
| #define GST_CAT_DEFAULT gst_cdio_debug |
| |
| void gst_cdio_add_cdtext_field (GstObject * src, |
| cdtext_t * cdtext, |
| + track_t track, |
| cdtext_field_t field, |
| const gchar * gst_tag, |
| GstTagList ** p_tags); |
| |
| GstTagList * gst_cdio_get_cdtext (GstObject * src, |
| +#if LIBCDIO_VERSION_NUM > 83 |
| + cdtext_t * t, |
| +#else |
| CdIo * cdio, |
| +#endif |
| track_t track); |
| |
| void gst_cdio_add_cdtext_album_tags (GstObject * src, |
| +#if LIBCDIO_VERSION_NUM > 83 |
| + cdtext_t * t, |
| +#else |
| CdIo * cdio, |
| +#endif |
| GstTagList * tags); |
| |
| #endif /* __GST_CDIO_H__ */ |
| diff --git a/ext/cdio/gstcdiocddasrc.c b/ext/cdio/gstcdiocddasrc.c |
| index 615a0c8..830839e 100644 |
| --- a/ext/cdio/gstcdiocddasrc.c |
| +++ b/ext/cdio/gstcdiocddasrc.c |
| @@ -206,6 +206,9 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device) |
| GstCdioCddaSrc *src; |
| discmode_t discmode; |
| gint first_track, num_tracks, i; |
| +#if LIBCDIO_VERSION_NUM > 83 |
| + cdtext_t *cdtext; |
| +#endif |
| |
| src = GST_CDIO_CDDA_SRC (audiocdsrc); |
| |
| @@ -244,8 +244,18 @@ gst_cdio_cdda_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device) |
| if (src->read_speed != -1) |
| cdio_set_speed (src->cdio, src->read_speed); |
| |
| +#if LIBCDIO_VERSION_NUM > 83 |
| + cdtext = cdio_get_cdtext (src->cdio); |
| + |
| + if (NULL == cdtext) |
| + GST_DEBUG_OBJECT (src, "no CD-TEXT on disc"); |
| + else |
| + gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext, |
| + cddabasesrc->tags); |
| +#else |
| gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio, |
| cddabasesrc->tags); |
| +#endif |
| |
| GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track); |
| |
| @@ -250,8 +263,14 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device) |
| * the right thing here (for cddb id calculations etc. as well) */ |
| track.start = cdio_get_track_lsn (src->cdio, i + first_track); |
| track.end = track.start + len_sectors - 1; /* -1? */ |
| +#if LIBCDIO_VERSION_NUM > 83 |
| + if (NULL != cdtext) |
| + track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext, |
| + i + first_track); |
| +#else |
| track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio, |
| i + first_track); |
| +#endif |
| |
| gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track); |
| } |
| -- |
| 2.1.0 |
| |