1 |
From 6700410efb1786e5a40f45515574a1bf713ba011 Mon Sep 17 00:00:00 2001 |
2 |
From: Leon Merten Lohse <leon@green-side.de> |
3 |
Date: Thu, 03 May 2012 22:50:30 +0000 |
4 |
Subject: cdio: compensate for libcdio's recent cd-text api changes |
5 |
|
6 |
https://bugzilla.gnome.org/show_bug.cgi?id=675112 |
7 |
--- |
8 |
(limited to 'ext/cdio') |
9 |
|
10 |
diff --git a/ext/cdio/gstcdio.c b/ext/cdio/gstcdio.c |
11 |
index 8940112..7b59030 100644 |
12 |
--- a/ext/cdio/gstcdio.c |
13 |
+++ b/ext/cdio/gstcdio.c |
14 |
@@ -30,12 +30,16 @@ |
15 |
GST_DEBUG_CATEGORY (gst_cdio_debug); |
16 |
|
17 |
void |
18 |
-gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, |
19 |
+gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track, |
20 |
cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags) |
21 |
{ |
22 |
const gchar *txt; |
23 |
|
24 |
+#if LIBCDIO_VERSION_NUM > 83 |
25 |
+ txt = cdtext_get_const (cdtext, field, track); |
26 |
+#else |
27 |
txt = cdtext_get_const (field, cdtext); |
28 |
+#endif |
29 |
if (txt == NULL || *txt == '\0') { |
30 |
GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag); |
31 |
return; |
32 |
@@ -57,6 +61,12 @@ gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, |
33 |
} |
34 |
|
35 |
GstTagList * |
36 |
+#if LIBCDIO_VERSION_NUM > 83 |
37 |
+gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track) |
38 |
+{ |
39 |
+ GstTagList *tags = NULL; |
40 |
+ |
41 |
+#else |
42 |
gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track) |
43 |
{ |
44 |
GstTagList *tags = NULL; |
45 |
@@ -67,14 +77,22 @@ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track) |
46 |
GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track); |
47 |
return NULL; |
48 |
} |
49 |
+#endif |
50 |
|
51 |
- gst_cdio_add_cdtext_field (src, t, CDTEXT_PERFORMER, GST_TAG_ARTIST, &tags); |
52 |
- gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_TITLE, &tags); |
53 |
+ gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER, |
54 |
+ GST_TAG_ARTIST, &tags); |
55 |
+ gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE, |
56 |
+ &tags); |
57 |
|
58 |
return tags; |
59 |
} |
60 |
|
61 |
void |
62 |
+#if LIBCDIO_VERSION_NUM > 83 |
63 |
+gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t, |
64 |
+ GstTagList * tags) |
65 |
+{ |
66 |
+#else |
67 |
gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags) |
68 |
{ |
69 |
cdtext_t *t; |
70 |
@@ -84,11 +102,14 @@ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags) |
71 |
GST_DEBUG_OBJECT (src, "no CD-TEXT for album"); |
72 |
return; |
73 |
} |
74 |
+#endif |
75 |
|
76 |
- /* FIXME: map CDTEXT_PERFORMER to GST_TAG_ALBUM_ARTIST once we have that */ |
77 |
- gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_ALBUM, &tags); |
78 |
- gst_cdio_add_cdtext_field (src, t, CDTEXT_GENRE, GST_TAG_GENRE, &tags); |
79 |
- |
80 |
+ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER, |
81 |
+ GST_TAG_ALBUM_ARTIST, &tags); |
82 |
+ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM, |
83 |
+ &tags); |
84 |
+ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE, |
85 |
+ &tags); |
86 |
GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags); |
87 |
} |
88 |
|
89 |
diff --git a/ext/cdio/gstcdio.h b/ext/cdio/gstcdio.h |
90 |
index ef31ed0..c6da580 100644 |
91 |
--- a/ext/cdio/gstcdio.h |
92 |
+++ b/ext/cdio/gstcdio.h |
93 |
@@ -24,22 +24,38 @@ |
94 |
#include <gst/gst.h> |
95 |
#include <cdio/cdio.h> |
96 |
#include <cdio/cdtext.h> |
97 |
+#include <cdio/version.h> |
98 |
+ |
99 |
+#if LIBCDIO_VERSION_NUM <= 83 |
100 |
+ #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER |
101 |
+ #define CDTEXT_FIELD_GENRE CDTEXT_GENRE |
102 |
+ #define CDTEXT_FIELD_TITLE CDTEXT_TITLE |
103 |
+#endif |
104 |
|
105 |
GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug); |
106 |
#define GST_CAT_DEFAULT gst_cdio_debug |
107 |
|
108 |
void gst_cdio_add_cdtext_field (GstObject * src, |
109 |
cdtext_t * cdtext, |
110 |
+ track_t track, |
111 |
cdtext_field_t field, |
112 |
const gchar * gst_tag, |
113 |
GstTagList ** p_tags); |
114 |
|
115 |
GstTagList * gst_cdio_get_cdtext (GstObject * src, |
116 |
+#if LIBCDIO_VERSION_NUM > 83 |
117 |
+ cdtext_t * t, |
118 |
+#else |
119 |
CdIo * cdio, |
120 |
+#endif |
121 |
track_t track); |
122 |
|
123 |
void gst_cdio_add_cdtext_album_tags (GstObject * src, |
124 |
+#if LIBCDIO_VERSION_NUM > 83 |
125 |
+ cdtext_t * t, |
126 |
+#else |
127 |
CdIo * cdio, |
128 |
+#endif |
129 |
GstTagList * tags); |
130 |
|
131 |
#endif /* __GST_CDIO_H__ */ |
132 |
diff --git a/ext/cdio/gstcdiocddasrc.c b/ext/cdio/gstcdiocddasrc.c |
133 |
index f57e368..88cf0c3 100644 |
134 |
--- a/ext/cdio/gstcdiocddasrc.c |
135 |
+++ b/ext/cdio/gstcdiocddasrc.c |
136 |
@@ -218,6 +218,9 @@ gst_cdio_cdda_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device) |
137 |
GstCdioCddaSrc *src; |
138 |
discmode_t discmode; |
139 |
gint first_track, num_tracks, i; |
140 |
+#if LIBCDIO_VERSION_NUM > 83 |
141 |
+ cdtext_t *cdtext; |
142 |
+#endif |
143 |
|
144 |
src = GST_CDIO_CDDA_SRC (cddabasesrc); |
145 |
|
146 |
@@ -244,8 +247,18 @@ gst_cdio_cdda_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device) |
147 |
if (src->read_speed != -1) |
148 |
cdio_set_speed (src->cdio, src->read_speed); |
149 |
|
150 |
+#if LIBCDIO_VERSION_NUM > 83 |
151 |
+ cdtext = cdio_get_cdtext (src->cdio); |
152 |
+ |
153 |
+ if (NULL == cdtext) |
154 |
+ GST_DEBUG_OBJECT (src, "no CD-TEXT on disc"); |
155 |
+ else |
156 |
+ gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext, |
157 |
+ cddabasesrc->tags); |
158 |
+#else |
159 |
gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio, |
160 |
cddabasesrc->tags); |
161 |
+#endif |
162 |
|
163 |
GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track); |
164 |
|
165 |
@@ -262,8 +275,14 @@ gst_cdio_cdda_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device) |
166 |
* the right thing here (for cddb id calculations etc. as well) */ |
167 |
track.start = cdio_get_track_lsn (src->cdio, i + first_track); |
168 |
track.end = track.start + len_sectors - 1; /* -1? */ |
169 |
+#if LIBCDIO_VERSION_NUM > 83 |
170 |
+ if (NULL != cdtext) |
171 |
+ track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext, |
172 |
+ i + first_track); |
173 |
+#else |
174 |
track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio, |
175 |
i + first_track); |
176 |
+#endif |
177 |
|
178 |
gst_cdda_base_src_add_track (GST_CDDA_BASE_SRC (src), &track); |
179 |
} |
180 |
-- |
181 |
cgit v0.9.0.2-2-gbebe |