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

