Blob Blame History Raw
From 9d5ac84e83fa6ca0cdde289eeeaa20c81a6ee4f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20B=C5=BEatek?= <tbzatek@redhat.com>
Date: Wed, 30 Oct 2013 15:55:51 +0000
Subject: [PATCH] Switch BRASERO_TRACK_STREAM_ISRC_TAG from int to string
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The International Standard Recording Code (ISRC) is a  12
byte string that is created from two uppercase characters
for the country code, followed by three uppercase characā€
ters  for  the owner, followed by two digits for the year
of recording followed by five digits for  the  recording
serial number.

https://bugzilla.gnome.org/show_bug.cgi?id=711162
---
 libbrasero-burn/brasero-tags.h             |  2 +-
 libbrasero-burn/brasero-track-stream-cfg.c | 10 +++++-----
 libbrasero-utils/brasero-io.c              |  4 +++-
 libbrasero-utils/brasero-metadata.c        | 14 +++++++++-----
 libbrasero-utils/brasero-metadata.h        |  2 +-
 plugins/audio2cue/burn-audio2cue.c         |  8 ++++----
 plugins/cdrkit/burn-wodim.c                |  7 +++----
 plugins/cdrtools/burn-cdrecord.c           |  7 +++----
 plugins/transcode/burn-transcode.c         |  8 ++++----
 src/brasero-audio-disc.c                   | 24 +++++++++++++-----------
 src/brasero-multi-song-props.c             |  6 +++---
 src/brasero-multi-song-props.h             |  2 +-
 src/brasero-project-parse.c                | 27 +++++++++++++++------------
 src/brasero-song-properties.c              | 23 ++++++-----------------
 src/brasero-song-properties.h              |  4 ++--
 src/brasero-video-disc.c                   | 23 +++++++++++++----------
 16 files changed, 86 insertions(+), 85 deletions(-)

diff --git a/libbrasero-burn/brasero-tags.h b/libbrasero-burn/brasero-tags.h
index 31a844d..c04f0a9 100644
--- a/libbrasero-burn/brasero-tags.h
+++ b/libbrasero-burn/brasero-tags.h
@@ -56,6 +56,7 @@ G_BEGIN_DECLS
 #define BRASERO_TRACK_STREAM_COMPOSER_TAG		"track::stream::info::composer"
 #define BRASERO_TRACK_STREAM_ARTIST_TAG			"track::stream::info::artist"
 #define BRASERO_TRACK_STREAM_ALBUM_TAG			"track::stream::info::album"
+#define BRASERO_TRACK_STREAM_ISRC_TAG			"track::stream::info::isrc"
 #define BRASERO_TRACK_STREAM_THUMBNAIL_TAG		"track::stream::snapshot"
 #define BRASERO_TRACK_STREAM_MIME_TAG			"track::stream::mime"
 
@@ -63,7 +64,6 @@ G_BEGIN_DECLS
  * Int
  */
 
-#define BRASERO_TRACK_STREAM_ISRC_TAG			"track::stream::info::isrc"
 
 /**
  * This tag (for sessions) is used to set an estimated size, used to determine
diff --git a/libbrasero-burn/brasero-track-stream-cfg.c b/libbrasero-burn/brasero-track-stream-cfg.c
index 9d53dd6..2699b6f 100644
--- a/libbrasero-burn/brasero-track-stream-cfg.c
+++ b/libbrasero-burn/brasero-track-stream-cfg.c
@@ -299,11 +299,11 @@ brasero_track_stream_cfg_results_cb (GObject *obj,
 		brasero_track_tag_add_string (BRASERO_TRACK (obj),
 					      BRASERO_TRACK_STREAM_COMPOSER_TAG,
 					      g_file_info_get_attribute_string (info, BRASERO_IO_COMPOSER));
-	if (g_file_info_get_attribute_int32 (info, BRASERO_IO_ISRC)
-	&& !brasero_track_tag_lookup_int (BRASERO_TRACK (obj), BRASERO_TRACK_STREAM_ISRC_TAG))
-		brasero_track_tag_add_int (BRASERO_TRACK (obj),
-					   BRASERO_TRACK_STREAM_ISRC_TAG,
-					   g_file_info_get_attribute_int32 (info, BRASERO_IO_ISRC));
+	if (g_file_info_get_attribute_string (info, BRASERO_IO_ISRC)
+	&& !brasero_track_tag_lookup_string (BRASERO_TRACK (obj), BRASERO_TRACK_STREAM_ISRC_TAG))
+		brasero_track_tag_add_string (BRASERO_TRACK (obj),
+					      BRASERO_TRACK_STREAM_ISRC_TAG,
+					      g_file_info_get_attribute_string (info, BRASERO_IO_ISRC));
 
 	/* Start monitoring it */
 	file = g_file_new_for_uri (uri);
diff --git a/libbrasero-utils/brasero-io.c b/libbrasero-utils/brasero-io.c
index 6124848..5619359 100644
--- a/libbrasero-utils/brasero-io.c
+++ b/libbrasero-utils/brasero-io.c
@@ -836,7 +836,6 @@ static void
 brasero_io_set_metadata_attributes (GFileInfo *info,
 				    BraseroMetadataInfo *metadata)
 {
-	g_file_info_set_attribute_int32 (info, BRASERO_IO_ISRC, metadata->isrc);
 	g_file_info_set_attribute_uint64 (info, BRASERO_IO_LEN, metadata->len);
 
 	if (metadata->type)
@@ -857,6 +856,9 @@ brasero_io_set_metadata_attributes (GFileInfo *info,
 	if (metadata->composer)
 		g_file_info_set_attribute_string (info, BRASERO_IO_COMPOSER, metadata->composer);
 
+	if (metadata->isrc)
+		g_file_info_set_attribute_string (info, BRASERO_IO_ISRC, metadata->isrc);
+
 	g_file_info_set_attribute_boolean (info, BRASERO_IO_HAS_AUDIO, metadata->has_audio);
 	if (metadata->has_audio) {
 		if (metadata->channels)
diff --git a/libbrasero-utils/brasero-metadata.c b/libbrasero-utils/brasero-metadata.c
index 7f10088..1943368 100644
--- a/libbrasero-utils/brasero-metadata.c
+++ b/libbrasero-utils/brasero-metadata.c
@@ -186,6 +186,9 @@ brasero_metadata_info_clear (BraseroMetadataInfo *info)
 	if (info->musicbrainz_id)
 		g_free (info->musicbrainz_id);
 
+	if (info->isrc)
+		g_free (info->isrc);
+
 	if (info->silences) {
 		g_slist_foreach (info->silences, (GFunc) g_free, NULL);
 		g_slist_free (info->silences);
@@ -216,7 +219,6 @@ brasero_metadata_info_copy (BraseroMetadataInfo *dest,
 	dest->has_dts = src->has_dts;
 	dest->rate = src->rate;
 	dest->channels = src->channels;
-	dest->isrc = src->isrc;
 	dest->len = src->len;
 	dest->is_seekable = src->is_seekable;
 	dest->has_audio = src->has_audio;
@@ -243,6 +245,9 @@ brasero_metadata_info_copy (BraseroMetadataInfo *dest,
 	if (src->musicbrainz_id)
 		dest->musicbrainz_id = g_strdup (src->musicbrainz_id);
 
+	if (src->isrc)
+		dest->isrc = g_strdup (src->isrc);
+
 	if (src->snapshot) {
 		dest->snapshot = src->snapshot;
 		g_object_ref (dest->snapshot);
@@ -943,11 +948,10 @@ foreach_tag (const GstTagList *list,
 		gst_tag_list_get_string (list, tag, &(self->composer));
 	}
 */	else if (!strcmp (tag, GST_TAG_ISRC)) {
-		gchar *isrc = NULL;
-		gst_tag_list_get_string (list, tag, &isrc);
+		if (priv->info->isrc)
+			g_free (priv->info->isrc);
 
-		if (isrc)
-			priv->info->isrc = (int) g_ascii_strtoull (isrc, NULL, 10);
+		gst_tag_list_get_string (list, tag, &(priv->info->isrc));
 	}
 	else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_TRACKID)) {
 		gst_tag_list_get_string (list, tag, &(priv->info->musicbrainz_id));
diff --git a/libbrasero-utils/brasero-metadata.h b/libbrasero-utils/brasero-metadata.h
index 8799642..eca95b4 100644
--- a/libbrasero-utils/brasero-metadata.h
+++ b/libbrasero-utils/brasero-metadata.h
@@ -69,7 +69,7 @@ typedef struct {
 	gchar *genre;
 	gchar *composer;
 	gchar *musicbrainz_id;
-	int isrc;
+	gchar *isrc;
 	guint64 len;
 
 	gint channels;
diff --git a/plugins/audio2cue/burn-audio2cue.c b/plugins/audio2cue/burn-audio2cue.c
index 2601533..78c21f9 100644
--- a/plugins/audio2cue/burn-audio2cue.c
+++ b/plugins/audio2cue/burn-audio2cue.c
@@ -455,7 +455,6 @@ brasero_audio2cue_create_thread (gpointer data)
 	tracks = NULL;
 	brasero_job_get_tracks (data, &tracks);
 	for (; tracks; tracks = tracks->next) {
-		int isrc;
 		guint64 gap;
 		guint64 len;
 		gchar *string;
@@ -463,6 +462,7 @@ brasero_audio2cue_create_thread (gpointer data)
 		BraseroTrack *track;
 		const gchar *performer;
 		const gchar *songwriter;
+		const gchar *isrc;
 
 		track = tracks->data;
 
@@ -527,9 +527,9 @@ brasero_audio2cue_create_thread (gpointer data)
 			g_free (line);
 		}
 
-		isrc = brasero_track_tag_lookup_int (track, BRASERO_TRACK_STREAM_ISRC_TAG);
-		if (isrc > 0) {
-			line = g_strdup_printf ("\tISRC %i\n", isrc);
+		isrc = brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_ISRC_TAG);
+		if (isrc) {
+			line = g_strdup_printf ("\tISRC \"%s\"\n", isrc);
 			if (write (fd_out, line, strlen (line)) < 0) {
 				int err_saved = errno;
 				priv->error = g_error_new_literal (BRASERO_BURN_ERROR,
diff --git a/plugins/cdrkit/burn-wodim.c b/plugins/cdrkit/burn-wodim.c
index c0477c8..be7e5b9 100644
--- a/plugins/cdrkit/burn-wodim.c
+++ b/plugins/cdrkit/burn-wodim.c
@@ -438,7 +438,6 @@ brasero_wodim_write_inf (BraseroWodim *wodim,
 			 GError **error)
 {
 	gint fd;
-	int isrc;
 	gint size;
         int errsv;
 	gchar *path;
@@ -514,9 +513,9 @@ brasero_wodim_write_inf (BraseroWodim *wodim,
 		goto error;
 
 	/* ISRC */
-	isrc = brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG);
-	if (isrc > 0)
-		string = g_strdup_printf ("ISRC=\t%i\n", isrc);
+	info = brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG);
+	if (info)
+		string = g_strdup_printf ("ISRC=\t%s\n", info);
 	else
 		string = g_strdup ("ISRC=\t\n");
 	size = strlen (string);
diff --git a/plugins/cdrtools/burn-cdrecord.c b/plugins/cdrtools/burn-cdrecord.c
index 92c23b3..89ba629 100644
--- a/plugins/cdrtools/burn-cdrecord.c
+++ b/plugins/cdrtools/burn-cdrecord.c
@@ -424,7 +424,6 @@ brasero_cdrecord_write_inf (BraseroCDRecord *cdrecord,
 			    GError **error)
 {
 	gint fd;
-	int isrc;
         int errsv;
 	gint size;
 	gchar *path;
@@ -503,9 +502,9 @@ brasero_cdrecord_write_inf (BraseroCDRecord *cdrecord,
 		goto error;
 
 	/* ISRC */
-	isrc = brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG);
-	if (isrc > 0)
-		string = g_strdup_printf ("ISRC=\t%i\n", isrc);
+	info = brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG);
+	if (info)
+		string = g_strdup_printf ("ISRC=\t%s\n", info);
 	else
 		string = g_strdup ("ISRC=\t\n");
 	size = strlen (string);
diff --git a/plugins/transcode/burn-transcode.c b/plugins/transcode/burn-transcode.c
index 6861168..b93d17a 100644
--- a/plugins/transcode/burn-transcode.c
+++ b/plugins/transcode/burn-transcode.c
@@ -1396,13 +1396,13 @@ foreach_tag (const GstTagList *list,
 		}
 	}
 	else if (!strcmp (tag, GST_TAG_ISRC)) {
-		if (!brasero_track_tag_lookup_int (track, BRASERO_TRACK_STREAM_ISRC_TAG)) {
+		if (!brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_ISRC_TAG)) {
 			gchar *isrc = NULL;
 
 			gst_tag_list_get_string (list, tag, &isrc);
-			brasero_track_tag_add_int (track,
-						   BRASERO_TRACK_STREAM_ISRC_TAG,
-						   (int) g_ascii_strtoull (isrc, NULL, 10));
+			brasero_track_tag_add_string (track,
+						      BRASERO_TRACK_STREAM_ISRC_TAG,
+						      isrc);
 		}
 	}
 	else if (!strcmp (tag, GST_TAG_PERFORMER)) {
diff --git a/src/brasero-audio-disc.c b/src/brasero-audio-disc.c
index e2c49b8..b0dce92 100644
--- a/src/brasero-audio-disc.c
+++ b/src/brasero-audio-disc.c
@@ -1477,7 +1477,6 @@ static void
 brasero_audio_disc_edit_multi_song_properties (BraseroAudioDisc *disc,
 					       GList *list)
 {
-	gint isrc;
 	gint64 gap;
 	GList *copy;
 	GList *item;
@@ -1487,6 +1486,7 @@ brasero_audio_disc_edit_multi_song_properties (BraseroAudioDisc *disc,
 	gchar *artist = NULL;
 	GtkResponseType result;
 	gchar *composer = NULL;
+	gchar *isrc = NULL;
 
 	model = gtk_tree_view_get_model (GTK_TREE_VIEW (disc->priv->tree));
 	toplevel = gtk_widget_get_toplevel (GTK_WIDGET (disc));
@@ -1550,10 +1550,10 @@ brasero_audio_disc_edit_multi_song_properties (BraseroAudioDisc *disc,
                                                       BRASERO_TRACK_STREAM_COMPOSER_TAG,
                                                       composer);
 
-		if (isrc > 0)
-                        brasero_track_tag_add_int (BRASERO_TRACK (track),
-                                                   BRASERO_TRACK_STREAM_ISRC_TAG,
-                                                   isrc);
+		if (isrc)
+                        brasero_track_tag_add_string (BRASERO_TRACK (track),
+                                                      BRASERO_TRACK_STREAM_ISRC_TAG,
+                                                      isrc);
 
                 if (gap > -1)
                         brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track),
@@ -1564,6 +1564,7 @@ brasero_audio_disc_edit_multi_song_properties (BraseroAudioDisc *disc,
 	g_list_free (copy);
 	g_free (artist);
 	g_free (composer);
+	g_free (isrc);
 
 	gtk_widget_destroy (props);
 }
@@ -1573,7 +1574,6 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
 						GtkTreePath *treepath)
 {
 	gint64 gap;
-	gint isrc;
 	gint64 end;
 	gint64 start;
 	guint track_num;
@@ -1586,6 +1586,7 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
 	gchar *title;
 	gchar *artist;
 	gchar *composer;
+	gchar *isrc;
 	GtkTreeIter iter;
 
 	model = gtk_tree_view_get_model (GTK_TREE_VIEW (disc->priv->tree));
@@ -1607,7 +1608,7 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
 					   brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ARTIST_TAG),
 					   brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_TITLE_TAG),
 					   brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_COMPOSER_TAG),
-					   brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG),
+					   brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG),
 					   length,
 					   brasero_track_stream_get_start (BRASERO_TRACK_STREAM (track)),
 					   brasero_track_stream_get_end (BRASERO_TRACK_STREAM (track)),
@@ -1657,10 +1658,10 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
 					      BRASERO_TRACK_STREAM_COMPOSER_TAG,
 					      composer);
 
-	if (isrc > 0)
-		brasero_track_tag_add_int (BRASERO_TRACK (track),
-					   BRASERO_TRACK_STREAM_ISRC_TAG,
-					   isrc);
+	if (isrc)
+		brasero_track_tag_add_string (BRASERO_TRACK (track),
+					      BRASERO_TRACK_STREAM_ISRC_TAG,
+					      isrc);
 
 	if (end - start + BRASERO_SECTORS_TO_DURATION (gap) < BRASERO_MIN_STREAM_LENGTH)
 		brasero_audio_disc_short_track_dialog (disc);
@@ -1668,6 +1669,7 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
 	g_free (title);
 	g_free (artist);
 	g_free (composer);
+	g_free (isrc);
 	gtk_widget_destroy (props);
 }
 
diff --git a/src/brasero-multi-song-props.c b/src/brasero-multi-song-props.c
index be2704e..823e22a 100644
--- a/src/brasero-multi-song-props.c
+++ b/src/brasero-multi-song-props.c
@@ -77,7 +77,7 @@ void
 brasero_multi_song_props_get_properties (BraseroMultiSongProps *self,
 					 gchar **artist,
 					 gchar **composer,
-					 gint *isrc,
+					 gchar **isrc,
 					 gint64 *gap)
 {
 	const gchar *text;
@@ -103,9 +103,9 @@ brasero_multi_song_props_get_properties (BraseroMultiSongProps *self,
 	if (isrc) {
 		text = gtk_entry_get_text (GTK_ENTRY (priv->isrc));
 		if (text && strcmp (text, _("<Keep current values>")))
-			*isrc = (gint) g_strtod (text, NULL);
+			*isrc = g_strdup (text);
 		else
-			*isrc = -1;
+			*isrc = NULL;
 	}
 
 	if (gap)
diff --git a/src/brasero-multi-song-props.h b/src/brasero-multi-song-props.h
index b7f4500..de34a73 100644
--- a/src/brasero-multi-song-props.h
+++ b/src/brasero-multi-song-props.h
@@ -70,7 +70,7 @@ void
 brasero_multi_song_props_get_properties (BraseroMultiSongProps *props,
 					 gchar **artist,
 					 gchar **composer,
-					 gint *isrc,
+					 gchar **isrc,
 					 gint64 *gap);
 
 G_END_DECLS
diff --git a/src/brasero-project-parse.c b/src/brasero-project-parse.c
index 5359678..b2a58a1 100644
--- a/src/brasero-project-parse.c
+++ b/src/brasero-project-parse.c
@@ -330,18 +330,22 @@ _read_audio_track (xmlDocPtr project,
         		g_free (unescaped_composer);
 		}
 		else if (!xmlStrcmp (uris->name, (const xmlChar *) "isrc")) {
-			gchar *isrc;
+			xmlChar *isrc;
+                        gchar *unescaped_isrc;
 
-			isrc = (gchar *) xmlNodeListGetString (project,
-							       uris->xmlChildrenNode,
-							       1);
+			isrc = xmlNodeListGetString (project,
+						     uris->xmlChildrenNode,
+						     1);
 			if (!isrc)
 				goto error;
 
-                        brasero_track_tag_add_int (BRASERO_TRACK (track),
-                                                   BRASERO_TRACK_STREAM_ISRC_TAG,
-                                                   (gint) g_ascii_strtod (isrc, NULL));
+			unescaped_isrc = g_uri_unescape_string ((char *) isrc, NULL);
 			g_free (isrc);
+
+                        brasero_track_tag_add_string (BRASERO_TRACK (track),
+                                                      BRASERO_TRACK_STREAM_ISRC_TAG,
+                                                      unescaped_isrc);
+        		g_free (unescaped_isrc);
 		}
 		else if (uris->type == XML_ELEMENT_NODE)
 			goto error;
@@ -626,7 +630,6 @@ _save_audio_track_xml (xmlTextWriter *project,
 	xmlChar *escaped;
 	gchar *start;
 	gint success;
-	gchar *isrc;
 	gchar *uri;
 	gchar *end;
 
@@ -709,13 +712,13 @@ _save_audio_track_xml (xmlTextWriter *project,
 			return FALSE;
 	}
 
-	if (brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG)) {
-		isrc = g_strdup_printf ("%d", brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG));
+	if (brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG)) {
+		escaped = (unsigned char *) g_uri_escape_string (brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG), NULL, FALSE);
 		success = xmlTextWriterWriteElement (project,
 						     (xmlChar *) "isrc",
-						     (xmlChar *) isrc);
+						     escaped);
 
-		g_free (isrc);
+		g_free (escaped);
 		if (success == -1)
 			return FALSE;
 	}
diff --git a/src/brasero-song-properties.c b/src/brasero-song-properties.c
index ebbdc32..b8c8de2 100644
--- a/src/brasero-song-properties.c
+++ b/src/brasero-song-properties.c
@@ -307,7 +307,7 @@ brasero_song_props_get_properties (BraseroSongProps *self,
 				   gchar **artist,
 				   gchar **title,
 				   gchar **composer,
-				   gint *isrc,
+				   gchar **isrc,
 				   gint64 *start,
 				   gint64 *end,
 				   gint64 *gap)
@@ -333,15 +333,8 @@ brasero_song_props_get_properties (BraseroSongProps *self,
 			*composer = NULL;
 	}
 
-	if (isrc) {
-		const gchar *string;
-
-		string = brasero_song_props_get_entry_value (GTK_ENTRY (self->priv->isrc));
-		if (string)
-			*isrc = (gint) g_strtod (string, NULL);
-		else
-			*isrc = 0;
-	}
+	if (isrc)
+		*isrc = brasero_song_props_get_entry_value (GTK_ENTRY (self->priv->isrc));
 
 	if (start)
 		*start = brasero_time_button_get_value (BRASERO_TIME_BUTTON (self->priv->start));
@@ -357,7 +350,7 @@ brasero_song_props_set_properties (BraseroSongProps *self,
 				   const gchar *artist,
 				   const gchar *title,
 				   const gchar *composer,
-				   gint isrc,
+				   const gchar *isrc,
 				   gint64 length,
 				   gint64 start,
 				   gint64 end,
@@ -391,12 +384,8 @@ brasero_song_props_set_properties (BraseroSongProps *self,
 		gtk_entry_set_text (GTK_ENTRY (self->priv->title), title);
 	if (composer)
 		gtk_entry_set_text (GTK_ENTRY (self->priv->composer), composer);
-
-	if (isrc) {
-		string = g_strdup_printf ("%i", isrc);
-		gtk_entry_set_text (GTK_ENTRY (self->priv->isrc), string);
-		g_free (string);
-	}
+	if (isrc)
+		gtk_entry_set_text (GTK_ENTRY (self->priv->isrc), isrc);
 
 	if (gap > 0) {
 		secs = gap / GST_SECOND;
diff --git a/src/brasero-song-properties.h b/src/brasero-song-properties.h
index edb0ddb..997a49e 100644
--- a/src/brasero-song-properties.h
+++ b/src/brasero-song-properties.h
@@ -60,7 +60,7 @@ brasero_song_props_get_properties (BraseroSongProps *self,
 				   gchar **artist,
 				   gchar **title,
 				   gchar **composer,
-				   gint *isrc,
+				   gchar **isrc,
 				   gint64 *start,
 				   gint64 *end,
 				   gint64 *gap);
@@ -70,7 +70,7 @@ brasero_song_props_set_properties (BraseroSongProps *self,
 				   const gchar *artist,
 				   const gchar *title,
 				   const gchar *composer,
-				   gint isrc,
+				   const gchar *isrc,
 				   gint64 length,
 				   gint64 start,
 				   gint64 end,
diff --git a/src/brasero-video-disc.c b/src/brasero-video-disc.c
index 3fa1134..d7c15b2 100644
--- a/src/brasero-video-disc.c
+++ b/src/brasero-video-disc.c
@@ -623,7 +623,6 @@ static void
 brasero_video_disc_edit_song_properties_list (BraseroVideoDisc *self,
 					      GList *list)
 {
-	gint isrc;
 	GList *item;
 	GList *copy;
 	GtkWidget *props;
@@ -631,6 +630,7 @@ brasero_video_disc_edit_song_properties_list (BraseroVideoDisc *self,
 	GtkTreeModel *model;
 	gchar *artist = NULL;
 	gchar *composer = NULL;
+	gchar *isrc = NULL;
 	GtkResponseType result;
 	BraseroVideoDiscPrivate *priv;
 
@@ -688,14 +688,15 @@ brasero_video_disc_edit_song_properties_list (BraseroVideoDisc *self,
 					      BRASERO_TRACK_STREAM_COMPOSER_TAG,
 					      composer);
 
-		brasero_track_tag_add_int (track,
-					   BRASERO_TRACK_STREAM_ISRC_TAG,
-					   isrc);
+		brasero_track_tag_add_string (track,
+					      BRASERO_TRACK_STREAM_ISRC_TAG,
+					      isrc);
 	}
 
 	g_list_free (copy);
 	g_free (artist);
 	g_free (composer);
+	g_free (isrc);
 end:
 
 	gtk_widget_destroy (props);
@@ -705,12 +706,12 @@ static void
 brasero_video_disc_edit_song_properties_file (BraseroVideoDisc *self,
 					      BraseroTrack *track)
 {
-	gint isrc;
 	gint64 end;
 	gint64 start;
 	gchar *title;
 	gchar *artist;
 	gchar *composer;
+	gchar *isrc;
 	GtkWidget *props;
 	guint64 length = 0;
 	GtkWidget *toplevel;
@@ -726,7 +727,7 @@ brasero_video_disc_edit_song_properties_file (BraseroVideoDisc *self,
 					   brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_ARTIST_TAG),
 					   brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_TITLE_TAG),
 					   brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_COMPOSER_TAG),
-					   brasero_track_tag_lookup_int (track, BRASERO_TRACK_STREAM_ISRC_TAG),
+					   brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_ISRC_TAG),
 					   length,
 					   brasero_track_stream_get_start (BRASERO_TRACK_STREAM (track)),
 					   brasero_track_stream_get_end (BRASERO_TRACK_STREAM (track)),
@@ -774,10 +775,12 @@ brasero_video_disc_edit_song_properties_file (BraseroVideoDisc *self,
 		g_free (composer);
 	}
 
-	if (isrc)
-		brasero_track_tag_add_int (track,
-					   BRASERO_TRACK_STREAM_ISRC_TAG,
-					   isrc);
+	if (isrc) {
+		brasero_track_tag_add_string (track,
+					      BRASERO_TRACK_STREAM_ISRC_TAG,
+					      isrc);
+		g_free (isrc);
+	}
 
 	brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track),
 					     start,
-- 
1.8.4.2